Является ли STL частью ядра c ++? - PullRequest
2 голосов
/ 11 июня 2011

У меня есть некоторые запутанные правдивые и ложные вопросы. Я бы хотел, чтобы кто-нибудь ответил на них и подтвердил ответ, потому что я уже выполнил поиск

1 - STL является частью ядра языка программирования c ++

2 - std :: string является частью STL (я думаю, T)

3 - Одна из целей итератора - соединить контейнеры и алгоритмы (я думаю,T)

4 - Элементы списка хранятся последовательно в памяти. (я думаю F)

5 - Элементы вектора хранятся последовательно в памяти. (думаю, F)

Ответы [ 6 ]

5 голосов
/ 11 июня 2011

(1) и (2) оба зависят от ваших определений.«STL» технически не является частью стандарта C ++, но достаточно большие его части были адаптированы к первоначальному стандарту, который закрепил название.Но да, шаблонные контейнеры, обычно называемые STL, являются частью официальной стандартной библиотеки C ++.«Ядро» может быть натяжкой;компилятор может фактически исключить их из автономной реализации, но вы почти никогда не будете писать для автономной реализации, поэтому различие не имеет значения.

(3) Они служатлюбая другая цель? Да, это одна цель.Как указывает Стив Джессоп ниже, они также связывают такие вещи, как потоки, которые можно итерировать, фактически не являясь контейнером, с алгоритмами.

(4) Вы имеете в виду std::list?Тогда вы правы.Если вы не хотите играть с семантикой;они хранятся последовательно, но, возможно, не смежно.

(5) В оригинальном стандарте, опубликованном в '98, это было бы возможно.В модифицированном стандарте от 03 года это изменилось на да.В обоих случаях может применяться семантический аргумент из (4)

3 голосов
/ 11 июня 2011

Я думаю, что ответы, данные ALS, верны.Более подробно о вашем первом вопросе - из книги Брюса Эккеля «Мышление на С ++» -

Часто возникает путаница между контейнерами и алгоритмами в стандартной библиотеке C ++ и сущностью, известной какSTL.Стандартной библиотекой шаблонов было имя, которое использовал Алексей Степанов (в то время работавший в Hewlett-Packard), когда он представлял свою библиотеку Комитету по стандартам C ++ на встрече в Сан-Диего, штат Калифорния, весной 1994 года. Название застряло, особенно послеHP решила сделать его доступным для публичного скачивания.Тем временем комитет включил его в стандартную библиотеку C ++, внеся большое количество изменений.Развитие STL продолжается в Silicon Graphics (SGI; см. http://www.sgi.com/Technology/STL).. SGL STL расходится со стандартной библиотекой C ++ по многим тонким вопросам. Поэтому, хотя это распространенное заблуждение, стандарт C ++ не «включает» STL. Он можетбыть немного запутанным, так как контейнеры и алгоритмы в стандартной библиотеке C ++ имеют тот же корень (и обычно те же имена), что и SGI STL. В этой книге я скажу «Стандартная библиотека C ++» или «Контейнеры стандартной библиотеки,»Или что-то подобное, и избегает термина« STL ».

2 голосов
/ 11 июня 2011

Вот мои ответы:

False  
True  
True
False  
True
0 голосов
/ 11 июня 2011

std :: string равно , а не является частью стандартной библиотеки шаблонов.Строки, STL и некоторые другие разные вещи вместе образуют стандартную библиотеку C ++.STL содержит контейнеры, итераторы, алгоритмы и функциональные объекты.У него есть конкретное значение, потому что он имеет определенное происхождение: библиотека шаблонов SGI.

0 голосов
/ 11 июня 2011
  1. является частью стандартной библиотеки, но ее реализация не покрывается стандартом.
  2. вероятно, да
  3. вероятно, да, но их основная цель - абстрагировать программиста от какой-либо контейнерной реализации и обобщить все коллекции
  4. нет, это совсем не гарантировано! 95 из 100, что это не в вашей реализации
  5. да
0 голосов
/ 11 июня 2011

Мои ответы:

  1. True - у вас не может быть C ++ без STL
  2. Правда - задокументировано, что так везде
  3. True - звучит разумно
  4. False - Нет, это связанный список
  5. True - да, это список на основе массива
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...