所以我试图将矢量b中的元素追加到矢量a的末尾,同时删除矢量b中的所有内容。以下是我的代码,由于某些原因,擦除无法正常工作。任何输入都是赞赏Thx !!
void problem3(std::vector<int>& a, std::vector<int>& b){
typedef std::vector<int>::iterator iter;
int place_holder;
for (iter i = b.begin();i !=b.end();i++){
place_holder = *i;//use place hodler to store values temporairly
a.push_back(place_holder);//erase the elements from b
b.erase(i);
//std::cout<<b.size()<<'\n';
//append at the end of a
}
}
答案 0 :(得分:5)
当矢量大小动态变化时,删除循环中的一个元素并不是一个好主意,否则很容易丢失正确的索引轨迹。
相反,尝试最后删除所有b
个元素:
b.clear();
P.S。:使用std::vector::insert()
有一种更简单的方法可以将矢量附加到另一个矢量,这样您只需要:
a.insert( a.end(), b.begin(), b.end() );
b.clear();
答案 1 :(得分:4)
这是因为你的迭代器在擦除时变得无效。 erase
will return你指向下一个元素的迭代器,例如i = b.erase(i)
。请注意,您希望在for循环中避免i++
(或更好:++i
),否则可能会跳过元素。