为什么在 C++ 入门中说我们不能向容器插入由迭代器表示的范围到(容器本身的)相同范围?
std::list<string> slist{"hi", "there!"};
slist.insert(slist.cbegin(), slist.cbegin(), slist.cend());
for(auto const& s : slist)
std::cout << s << ' ';
std::cout << '\n';
输出:
hi there! hi there!
该程序似乎工作正常,但在 C++ 入门第 5 版中。据说这是一个“运行时错误:表示要复制的范围的迭代器。迭代器不能引用与我们正在更改的容器相同的容器”。
是否说这是一个错误,因为
insert
函数会使迭代器无效?如果是这样,那么为什么我的程序似乎工作正常?