Сначала немного фона:list insert возвращает void для C++ 11, почему?
Я писал для назначения программирования, для чего требуется разбор текстового файла грамматики. В этом случае мне нужно заменить строку-заполнитель в std::list<string>
с его соответствующим расширением (строка представляет предложение).
я итерация по списку, и удалите соответствующую строку:
itr = ls.erase(itr)
где прОш итератор и Ls является моим std::list<string>
Я затем вставить расширение как
itr = ls.insert(itr, other.begin(), other.end());
где другой - контейнер, в котором хранится расширение.
Моя проблема в том, что предыдущая строка, по-видимому, не работает. Предположительно, это синтаксис C++ 11, и мне очень хотелось бы, чтобы итератор указывал на начало того, что я только что вставил. Но я получаю ошибки компиляции, так как insert
, очевидно, возвращает void
.
Я проверил cplusplus.com и as far as i can see, я не вижу ничего плохого в том, как я его использую. The standard (или по крайней мере один, что я могу видеть) гласит:
iterator insert(const_iterator position, InputIterator first,
InputIterator last);
Я компиляции с помощью г ++ (4.8.1) с -std=c++11
флагом, но когда я смотрю на stl_list.h в (gcc-directory)/include/c++/4.8.1/bits
я вижу:
void
insert(iterator __position, _InputIterator __first,_InputIterator __last)
Это просто потому, что gcc не полностью реализовала библиотеку C++ 11? Они упустили этот бит? Кажется, что это не сложно, и все остальные функции вставки, связанные с ним, возвращают итератор.
Я знаю, что могу обойти это без лишних хлопот, но все же было бы неплохо узнать, что происходит.
Спасибо!
Редактировать По-видимому this отвечает на мой вопрос. Извините, что беспокою вас, жаль, что я не мог найти его раньше.
«* и стандарт *« Ницца, хотя cppreference.com есть, это * не * «стандарт». Это просто вики. –
ах, спасибо, был немного не уверен в этом. Я довольно новичок в C++, лучшее, что я могу найти бесплатно, будет: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf – tang
Я предполагаю, что libstdC++ версия, которая поставляется вместе с GCC 4.8, пока не обновляется. – Xeo