list insert为c ++ 11返回void,为什么?

时间:2013-09-03 02:19:42

标签: gcc c++11 insert stdlist gcc4.8

首先介绍一下背景:

我一直在编写一个编程作业,这需要我解析一个文本语法文件。在这里,我需要将std::list<string>中的占位符字符串替换为相应的扩展(字符串代表一个句子)。

我遍历列表,并用:

删除匹配的字符串
itr = ls.erase(itr)

其中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);

我正在使用带有-std=c++11标志的g ++(4.8.1)进行编译,但当我在(gcc-directory)/include/c++/4.8.1/bits中查看stl_list.h时,我看到了:

void
    insert(iterator __position, _InputIterator __first,_InputIterator __last)

这只是因为gcc还没有完全实现c ++ 11库吗?他们忽略了这一点吗?似乎并不难做,围绕它的所有其他插入函数都返回一个迭代器。

我知道我可以毫不费力地解决这个问题,但是知道发生了什么事情仍然会很好。

谢谢!

编辑显然this回答了我的问题。很抱歉打扰你,可惜我以前找不到。

1 个答案:

答案 0 :(得分:2)

Libstdc ++尚未更新,尚未从该函数返回迭代器。

这个修补程序在两个月前修复了这个修补程序:http://gcc.gnu.org/ml/libstdc++/2013-07/msg00000.html

这一变化是在GCC 4.8.1发布之后做出的,我认为这一变化无论如何都不会被移植到4.8分支。