刚刚学习 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;
}
}