我无法正确地从矢量中删除元素

时间:2014-05-02 05:05:37

标签: c++ pointers vector erase

所以我试图将矢量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
    }
}

2 个答案:

答案 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),否则可能会跳过元素。