回答如何自我复制向量?让我对迭代器失效感到有些困惑。一些文献说“如果您使用 insert、push_back 等,请考虑所有迭代器无效”。很明显,它可能会导致向量增长,从而使迭代器无效。我知道会有足够空间的特殊情况呢?
第一次尝试:
myvec.reserve(myvec.size()*3); //does this protect me from iterator invalidation?
vector<string>::iterator it = myvec.end();
myvec.insert(myvec.end(), myvec.begin(), it);
myvec.insert(myvec.end(), myvec.begin(), it);
经过一些出色的答案后,第二次尝试:
auto size = myvec.size();
myvec.reserve(size*3); //does this protect me from iterator invalidation?
myvec.insert(myvec.end(), myvec.begin(), myvec.begin()+size);
myvec.insert(myvec.end(), myvec.begin(), myvec.begin()+size);
经过更优秀的答案第三次尝试:
auto size = myvec.size();
myvec.reserve(size*3); //does this protect me from iterator invalidation?
back_insert_iterator< vector<string> > back_it (myvec);
copy (myvec.begin(),myvec.begin()+size,back_it);
copy (myvec.begin(),myvec.begin()+size,back_it);
这句话来自 Josuttis 的“C++ 标准库参考”:
插入或删除元素会使引用以下元素的引用、指针和迭代器无效。如果插入导致重新分配,它会使所有引用、迭代器和指针无效。
表明我的代码是安全且已定义的行为。标准中是否有段落可以保证这一点?