首先介绍一下背景:
我一直在写一个编程作业,这需要我解析一个文本语法文件。在此,我需要将 a 中的占位符字符串替换std::list<string>
为其对应的扩展(该字符串表示一个句子)。
我遍历列表,并删除匹配的字符串:
itr = ls.erase(itr)
其中 itr 是迭代器, ls 是我的std::list<string>
然后我插入扩展
itr = ls.insert(itr, other.begin(), other.end());
其中 other 是存储扩展的容器。
我的问题是上一行显然不起作用。它应该是有效的 c++11 语法,我真的希望迭代器指向我刚刚插入的内容的开头。但我得到编译错误,insert
显然返回void
.
我已经检查过 cplusplus.com,据我所知,我认为我的使用方式没有任何问题。标准(或至少我能看到的标准)规定:
iterator insert(const_iterator position, InputIterator first,
InputIterator last);
我正在使用带有-std=c++11
标志的 g++ (4.8.1) 进行编译,但是当我查看 stl_list.h 时,(gcc-directory)/include/c++/4.8.1/bits
我看到:
void
insert(iterator __position, _InputIterator __first,_InputIterator __last)
这仅仅是因为 gcc 还没有完全实现 c++11 库吗?他们忽略了这一点吗?似乎并不难做到,并且围绕它的所有其他插入函数都返回一个迭代器。
我知道我可以轻松解决这个问题,但仍然很高兴知道发生了什么。
谢谢!
编辑显然这回答了我的问题。不好意思打扰了,可惜之前没找到。