Существуют ли различия в стандарте C ++ STL? - PullRequest
6 голосов
/ 08 апреля 2011

Я всегда неукоснительно использовал руководство программиста стандартной библиотеки шаблонов SGI (STLPG) в качестве справочного руководства всякий раз, когда что-то внедряю в C ++ с использованием STL.До вчерашнего дня это никогда не подводило меня, но вчера я работал с std :: vector на работе и занимался парным программированием с моим коллегой, который сказал мне использовать метод assign .Я не узнал этот метод, который необычен для меня, поэтому я начал копаться в части std :: vector STLPG, и там не упоминается ни о каких методах назначения.Мой коллега указал мне на страницу cpluplus.com на std :: vector , и вот, вот вместе с парой других методов, таких как at , у меня также никогда не быловидел.

Это ужасно смутило меня, поэтому я зашел в средневековье по этой проблеме и покопался в * / usr / include / c ++ / 4.1.2 / bits / stl_vector.h *, который является авторским правом Hewlett-Packard Company 1994 и SiliconGraphics Computer Systems, Inc., 1996 г., и содержит реализации как назначения, так и без каких-либо специальных комментариев, в которых упоминается, почему они опущены в собственной документации самого последнего правообладателя.

Есть ли кто-нибудь более опытный, чем я, который мог бы осветитьСообщество относительно того, почему существуют эти несоответствия, и какому онлайн справочному руководству я могу доверять, чтобы соответствовать всем современным реализациям STL?

Ответы [ 4 ]

3 голосов
/ 08 апреля 2011

Я обычно использую C ++ Reference , главным образом потому, что его Googles сначала попадет, если вы ищете что-то вроде c++ std vector.Но я также нашел информацию, представленную там, точной.

В случае сомнений я ссылаюсь на последний рабочий проект стандарта C ++ .(например, чтобы ответить на ваш начальный вопрос, глава 23.3.6 [vector]). Конечно, тогда это C ++ 0x, который может еще не полностью поддерживаться, поэтому вы можете проверить более старый черновик (то есть последний перед C +).+03 было выпущено).

3 голосов
/ 08 апреля 2011

STL SGI - это библиотека, которая в больших частях была включена в стандартную библиотеку ISO C ++.Некоторые части были исключены, и многие другие компоненты библиотеки были добавлены из других источников.

И, как вы заметили, были сделаны некоторые изменения для улучшения или согласования интерфейсов с различными компонентами.

Еще большие изменения произойдут позже в этом году (надеюсь) с новым стандартом C ++ 11, до сих пор известным как C ++ 0x .

1 голос
/ 08 апреля 2011

SGI STL - это база того, что в Стандарте, не совсем то же самое. Проще говоря, с 1994 года прошло очень много времени, например, семнадцать лет, поэтому следует ожидать, что за это время кое-что изменилось. Я лично использую MSDN для ссылки на стандартную библиотеку.

1 голос
/ 08 апреля 2011

SGI STL был внедрен в 1997 году, а стандарт C ++ был опубликован в 1998 году.

Если вам нужна надежная ссылка на интерфейс STL, ищите стандарт C ++ 2003. Или, если вы не возражаете против обновления, последний черновик C ++ находится по адресу http://www.open -std.org / jtc1 / sc22 / wg21 / документы / документы / 2011 / n3242.pdf

В частности, если вы переходите к N3242, раздел 23.3.6, вы знаете, что есть assign и at.

template <class InputIterator>
void assign(InputIterator first, InputIterator last);

Эффекты:

erase(begin(), end());
insert(begin(), first, last);

и

void assign(size_type n, const T& t);

Эффекты:

erase(begin(), end());
insert(begin(), n, t);

и

const_reference at(size_type n) const;
reference at(size_type n);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...