Я должен стать опытным с библиотеками STL прежде, чем изучить альтернативы ПОВЫШЕНИЯ?

Вот моя трещина на нем:

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,",")

Первый параметр - это ячейка для проверки, а вторая - разделитель, который вы хотите использовать (в вашем примере это запятая)

25
задан mghie 14 February 2009 в 09:17
поделиться

9 ответов

У STL есть некоторые основные понятия. Boost основывается на них и расширяется. Если вы понимаете их, то переход к Boost может быть вам полезен. Если нет, я бы начал с STL.

  • Различие между различными типами контейнеров (последовательности, подобные vector, list и deque, и ассоциациями, подобными map, set и их разновидностями multi* и unordered_*). Иногда вы можете поменять одно на другое, иногда нет. Знайте их сильные стороны и их пределы.
  • Роль итераторов и то, как они обеспечивают мост между контейнерами и алгоритмами. (Я использую это снова и снова).
  • Почему существуют стандартные алгоритмы: они часто представляют собой небольшие объемы кода, поэтому может быть неясно, почему они существуют. Узнайте, с какими контейнерами они работают, и как специализировать их для конкретных случаев (например, посмотрите, как универсальный copy отличается от copy, специализированного для const char *).
  • Как и когда используются классы черт.
  • Как использовать связующие (bind1st, ptr_fun и mem_fun): синтаксис может скрыть их полезность.
  • Как использовать string - и когда нет , чтобы использовать его. (У всех струнных классов есть свои компромиссы: изучение плюсов и минусов стандартного является образовательным).
  • Разница между потоками и потоковыми буферами: как использовать первый для выполнения форматированного ввода-вывода (попробуйте прочитать строку из потока: это не так просто, как должно быть), а второй - для быстрого низкоуровневого ввода-вывода. /O.

Принципы, используемые для разработки STL, основаны и расширены библиотеками Boost. Если вы их получите, Boost управляем. Если вы этого не сделаете, и Boost в конечном итоге будет трудно следовать, вы можете вернуться в STL, чтобы получить свои ориентиры.

(В общем, Boost действительно расширяет границы языка. Если вы решите, что действительно хотите расширить свои знания C ++, и проверить, действительно ли вы знаете то, что, по вашему мнению, знаете, тогда это может стать интересной задачей. мы использовали C ++ более десятка лет, научили других людей его использовать, с тех пор приобрели навыки во многих более высокоуровневых языках, и Boost все еще удивляет меня. Это очень полезно, но это не так тривиально). [тысяча сто двадцать-пять]

42
ответ дан quark 15 October 2019 в 15:20
поделиться

Я предложил бы получить ясный дескриптор на STL перед рассмотрением Повышения. Повышение предназначено для создания сверху STL, и многие библиотеки намечены для становления частью стандартной библиотеки в конечном счете. Библиотеки повышения являются обычно менее сформировавшимися и менее стандартными, чем STL. Кроме того, многие библиотеки повышения заходят слишком далеко, по-моему, добавляя "опции", которые исходно не существуют в C++ (ведущий к действительно безумному синтаксису). Во многих случаях существуют более нормальные идиомы C++, доступные для решения большинства проблем программирования, не пользуясь этими тайными библиотеками Boost.

11
ответ дан postfuturist 15 October 2019 в 15:20
поделиться

Я думаю, что хорошо использовать оба варианта с самого начала. Boost предоставляет множество мощных функций, широко используется и имеет хорошую репутацию. Большинство вещей, которые он предоставляет, имеют те же общие концепции программирования, с которыми был разработан STL, поэтому в этом смысле это не должно быть очень запутанным.

Лучший способ научиться чему-либо - это использовать отличный код, а затем посмотреть, как он написан. Это хорошо сработало для меня с Boost. Прочитайте учебник по шаблонам, и вы будете вдохновлены новой силой, которую вы открыли в течение часа. Затем прочитайте заголовок Boost, который вы использовали некоторое время, и вы будете вдохновлены в течение нескольких недель.

Конечно, не ожидайте немедленного понимания этих внутренних функций - сначала я просто использовал библиотеки, не понимая, как вы построите что-либо из этого, и это нормально. Но в какой-то момент вы понимаете, что хотите написать что-то с похожим дизайном, и тогда вы начнете искать.

Если вы сделаете обратное и ограничитесь «C ++ как более безопасный C», то вы не будете подвержены всем этим мощным вещам, поэтому у вас не будет соблазна посмотреть и понять их, и поэтому вы будете писать довольно примитивный код и учиться медленнее.

РЕДАКТИРОВАТЬ: забыл, что у меня была другая мысль - взглянуть на предстоящий стандарт C ++ 0x тоже. Он включает в себя множество функций, которые возникли в Boost. То есть студенты, начинающие изучать C ++ через несколько лет, будут работать с этими концепциями с самого начала - вы могли бы сделать это и сегодня ...

5
ответ дан yungchin 15 October 2019 в 15:20
поделиться

В конечном счете необходимо изучить обоих. Но STL может быть изучен в изоляции, тогда как повышение не будет иметь большого смысла, пока Вы не поймете STL, так как это - то, какое Повышение смоделировано на и разработано для расширения. Поэтому учитесь использовать STL в качестве части изучения C++. И затем можно идти дальше для Повышения, который является более или менее "второй стандартной библиотекой" в эти дни.

4
ответ дан jalf 15 October 2019 в 15:20
поделиться

Я пошел бы с изучением STL сначала.

, После того как Вы проходите основы с C++, учась, как использовать части STL и затем как он работает, будет лучше, чем занятие Повышением. Библиотеки Boost склонны продвигать края C++ особенно в комбинациях высоко шаблонных функций.

мне нравится Matt Austern Универсальное Программирование и STL, который Вы можете погрузка дешево подержанный .

2
ответ дан Andy Dent 15 October 2019 в 15:20
поделиться

Это зависит полностью от того, собираетесь ли Вы быть способными использовать Повышение всей Вашей работы. Я не сомневаюсь, что будут рабочие места, которые запретят его использование (однако глупый, который может казаться).

, Но, если Вы думаете, что сможете использовать его где угодно, затем любой ценой сконцентрируетесь главным образом на нем.

, Если существует функциональность, обеспеченная STL, но не Повышением, концентратом при изучении тех битов STL.

1
ответ дан paxdiablo 15 October 2019 в 15:20
поделиться

Сначала используйте STL, потому что именно этим вы будете пользоваться большую часть времени. Освоить все надстройки действительно сложно, проверьте с надстройкой для любой библиотеки, которая не доступна с c ++ из коробки. Как библиотека разбора, библиотека графов

1
ответ дан yesraaj 15 October 2019 в 15:20
поделиться

Учитесь путем программирования и используйте подходящие лучше всего инструменты. При программировании чего-то, чему нужен большой парсинг затем, Вы, возможно, изучите часть духа повышения, но прежде чем Вы получите это далеко, Вы также узнаете материал о станд.:: строка и станд.:: fstream. следующее приложение, которое Вы пишете, возможно, будет нужен станд.:: векторы и повышение:: аккумуляторы.

Просто помнят, что повышение огромно, Вы будете программистом хорошего качества путь перед использованием даже четверти из него (лично, я не ожидаю когда-либо использовать или изучать большую часть повышения, потому что мне не нужен он...).

1
ответ дан Patrick 15 October 2019 в 15:20
поделиться

Изучите STL сначала. Если Вы изучите C++ с Повышением от запуска, то Вам придется нелегко позже в задании, где Повышение не используется (из-за лицензирования причин и т.д.). Знайте стандарт языка сначала и затем разверните его с Повышением позже при необходимости в нем для определенных вещей.

1
ответ дан Frank 15 October 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: