【发布时间】:2013-04-03 03:58:03
【问题描述】:
刚学c++,所以我可能理解不正确,但我只读到范围插入函数在新标准下返回一个迭代器(C++ Primer 5th Ed,cplusplus.com,cppreference.com,以及各种建议使用它来保持迭代器有效性的答案)。
来自 cppreference.com:
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
但是,我尝试过的每个 Cygwin GCC 和 MinGW 版本都使用 -std=c++11 返回 void。即使看标题,它似乎就是这样写的,而且我无法修改任何东西来解决这个问题。
我错过了什么?
这是我试图编写的“章节练习结束”功能;用给定字符串中的一个字符串替换另一个字符串:
(我知道它不会按预期的方式运行)
void myfun(std::string& str, const std::string& oldStr, const std::string& newStr)
{
auto cur = str.begin();
while (cur != str.end())
{
auto temp = cur;
auto oldCur = oldStr.begin();
while (temp != str.end() && *oldCur == *temp)
{
++oldCur;
++temp;
if (oldCur == oldStr.end())
{
cur = str.erase(cur, temp);
// Here we go. The problem spot!!!
cur = str.insert(cur, newStr.begin(), newStr.end());
break;
}
}
++cur;
}
}
【问题讨论】:
-
您使用的是哪个版本的 MinGW?请不要说“每个版本”。那没有帮助。具体一点。
-
啊,谢谢。使用mingw-get-inst-20120426.exe的最新版本,4.6.2; i686-w64-mingw32-gcc-dw2-4.8.0-win32_rubenvb; x86_64-w64-mingw32-gcc-4.6.3-2-release-win64_rubenvb;和 MinGW-TDM 4.7.1-dw2
-
似乎标准库的实现在某些地方还没有赶上新标准。
-
@Nawaz:即使是 4.8 也没有实现它:liveworkspace.org/code/3dnNFJ$0 -- VC11 实现了。
-
注意:这不是编译器问题,而是标准库实现问题。虽然每个编译器都捆绑了一个标准库实现,但您可以将一个实现换成另一个:例如 Clang 编译 libstdc++ 和 libc++。