Вот моя трещина на нем:
Function Dedupe(MyString As String, MyDelimiter As String)
Dim MyArr As Variant, MyNewArr() As String, X As Long, Y As Long
MyArr = Split(MyString, MyDelimiter)
ReDim MyNewArr(0)
MyNewArr(0) = MyArr(0)
Y = 0
For X = 1 To UBound(MyArr)
If InStr(1, Join(MyNewArr, MyDelimiter), MyDelimiter & MyArr(X)) = 0 Then
Y = Y + 1
ReDim Preserve MyNewArr(Y)
MyNewArr(Y) = MyArr(X)
End If
Next
Dedupe = Join(MyNewArr, MyDelimiter)
End Function
Вызвать это в коде:
Dedupe(Range("A1").Text,",")
Или как это на листе:
=Dedupe(A1,",")
Первый параметр - это ячейка для проверки, а вторая - разделитель, который вы хотите использовать (в вашем примере это запятая)
У STL есть некоторые основные понятия. Boost основывается на них и расширяется. Если вы понимаете их, то переход к Boost может быть вам полезен. Если нет, я бы начал с STL.
vector
, list
и deque
, и ассоциациями, подобными map
, set
и их разновидностями multi*
и unordered_*
). Иногда вы можете поменять одно на другое, иногда нет. Знайте их сильные стороны и их пределы. copy
отличается от copy
, специализированного для const char *
). bind1st
, ptr_fun
и mem_fun
): синтаксис может скрыть их полезность. string
- и когда нет , чтобы использовать его. (У всех струнных классов есть свои компромиссы: изучение плюсов и минусов стандартного является образовательным). Принципы, используемые для разработки STL, основаны и расширены библиотеками Boost. Если вы их получите, Boost управляем. Если вы этого не сделаете, и Boost в конечном итоге будет трудно следовать, вы можете вернуться в STL, чтобы получить свои ориентиры.
(В общем, Boost действительно расширяет границы языка. Если вы решите, что действительно хотите расширить свои знания C ++, и проверить, действительно ли вы знаете то, что, по вашему мнению, знаете, тогда это может стать интересной задачей. мы использовали C ++ более десятка лет, научили других людей его использовать, с тех пор приобрели навыки во многих более высокоуровневых языках, и Boost все еще удивляет меня. Это очень полезно, но это не так тривиально). [тысяча сто двадцать-пять]
Я предложил бы получить ясный дескриптор на STL перед рассмотрением Повышения. Повышение предназначено для создания сверху STL, и многие библиотеки намечены для становления частью стандартной библиотеки в конечном счете. Библиотеки повышения являются обычно менее сформировавшимися и менее стандартными, чем STL. Кроме того, многие библиотеки повышения заходят слишком далеко, по-моему, добавляя "опции", которые исходно не существуют в C++ (ведущий к действительно безумному синтаксису). Во многих случаях существуют более нормальные идиомы C++, доступные для решения большинства проблем программирования, не пользуясь этими тайными библиотеками Boost.
Я думаю, что хорошо использовать оба варианта с самого начала. Boost предоставляет множество мощных функций, широко используется и имеет хорошую репутацию. Большинство вещей, которые он предоставляет, имеют те же общие концепции программирования, с которыми был разработан STL, поэтому в этом смысле это не должно быть очень запутанным.
Лучший способ научиться чему-либо - это использовать отличный код, а затем посмотреть, как он написан. Это хорошо сработало для меня с Boost. Прочитайте учебник по шаблонам, и вы будете вдохновлены новой силой, которую вы открыли в течение часа. Затем прочитайте заголовок Boost, который вы использовали некоторое время, и вы будете вдохновлены в течение нескольких недель.
Конечно, не ожидайте немедленного понимания этих внутренних функций - сначала я просто использовал библиотеки, не понимая, как вы построите что-либо из этого, и это нормально. Но в какой-то момент вы понимаете, что хотите написать что-то с похожим дизайном, и тогда вы начнете искать.
Если вы сделаете обратное и ограничитесь «C ++ как более безопасный C», то вы не будете подвержены всем этим мощным вещам, поэтому у вас не будет соблазна посмотреть и понять их, и поэтому вы будете писать довольно примитивный код и учиться медленнее.
РЕДАКТИРОВАТЬ: забыл, что у меня была другая мысль - взглянуть на предстоящий стандарт C ++ 0x тоже. Он включает в себя множество функций, которые возникли в Boost. То есть студенты, начинающие изучать C ++ через несколько лет, будут работать с этими концепциями с самого начала - вы могли бы сделать это и сегодня ...
В конечном счете необходимо изучить обоих. Но STL может быть изучен в изоляции, тогда как повышение не будет иметь большого смысла, пока Вы не поймете STL, так как это - то, какое Повышение смоделировано на и разработано для расширения. Поэтому учитесь использовать STL в качестве части изучения C++. И затем можно идти дальше для Повышения, который является более или менее "второй стандартной библиотекой" в эти дни.
Я пошел бы с изучением STL сначала.
, После того как Вы проходите основы с C++, учась, как использовать части STL и затем как он работает, будет лучше, чем занятие Повышением. Библиотеки Boost склонны продвигать края C++ особенно в комбинациях высоко шаблонных функций.
мне нравится Matt Austern Универсальное Программирование и STL, который Вы можете погрузка дешево подержанный .
Это зависит полностью от того, собираетесь ли Вы быть способными использовать Повышение всей Вашей работы. Я не сомневаюсь, что будут рабочие места, которые запретят его использование (однако глупый, который может казаться).
, Но, если Вы думаете, что сможете использовать его где угодно, затем любой ценой сконцентрируетесь главным образом на нем.
, Если существует функциональность, обеспеченная STL, но не Повышением, концентратом при изучении тех битов STL.
Сначала используйте STL, потому что именно этим вы будете пользоваться большую часть времени. Освоить все надстройки действительно сложно, проверьте с надстройкой для любой библиотеки, которая не доступна с c ++ из коробки. Как библиотека разбора, библиотека графов
Учитесь путем программирования и используйте подходящие лучше всего инструменты. При программировании чего-то, чему нужен большой парсинг затем, Вы, возможно, изучите часть духа повышения, но прежде чем Вы получите это далеко, Вы также узнаете материал о станд.:: строка и станд.:: fstream. следующее приложение, которое Вы пишете, возможно, будет нужен станд.:: векторы и повышение:: аккумуляторы.
Просто помнят, что повышение огромно, Вы будете программистом хорошего качества путь перед использованием даже четверти из него (лично, я не ожидаю когда-либо использовать или изучать большую часть повышения, потому что мне не нужен он...).
Изучите STL сначала. Если Вы изучите C++ с Повышением от запуска, то Вам придется нелегко позже в задании, где Повышение не используется (из-за лицензирования причин и т.д.). Знайте стандарт языка сначала и затем разверните его с Повышением позже при необходимости в нем для определенных вещей.