STL 容器的范围插入函数在 C++11 下返回 void?
STL containers' range insert functions returning void under c++11?
刚刚学习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。即使看一下标题,它似乎就是这样写的,并且我无法修改来修复它。
我错过了什么?
这是我试图写的"end of chapter exercise"函数;用给定字符串中的另一个字符串替换一个字符串:
(我知道它不会像它写的那样起作用)
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;
}
}
目前还没有完全支持C++11
的编译器。后来的gcc
和clang
版本实现了大部分新标准,但仍有部分需要完成。实际上,查看gcc 4.7.0
的basic_string.h
显示insert
的这个版本还没有更新:
template<class _InputIterator>
void
insert(iterator __p, _InputIterator __beg, _InputIterator __end) { ... }
相关文章:
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- c++ 11 带有 decltype 的尾随返回类型无法按预期工作
- 为什么 c++11 std::normal_distribution 在从函数调用时返回相同的模式?
- 在 C++11 函数中使用尾随返回类型的优点
- 外部函数在 main() 上调用时返回分段错误 11.(C++)
- 使用std::tie进行类似golang的错误处理,同时返回结果,是否有缺点?(C++11)
- 是否可以通过使用移动/交换 c++11 来延长返回的临时变量的生命周期
- C++ 14 与 11 - 大小返回不同的值?
- 当加入 C++11 函数的线程仍未终止时,是否可以返回?
- 在 C++11 中创建并返回包含 lambda 成员变量的类
- 使 c++11 Dijkstra 实现返回最短路径
- 具有尾随返回类型的通用 lambda,具体取决于 C++11 中的可变参数
- 分段故障 11 返回时
- C++11 decltype 返回正确的类型,但代码无法编译
- C 11返回值和错误对
- C++11-返回一个表达式以确定类型
- C++11:返回数组
- c++11返回值优化或移动
- C++11 - 返回通过左值传递到函数中的右值