c++ - 我无法正确删除 vector 中的元素

标签 c++ pointers vector erase

所以我试图将 vector b 中的元素附加到 vector a 的末尾,同时删除 vector 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
    }
}

最佳答案

在循环中删除一个元素不是一个好主意,因为 vector 大小是动态变化的,你很容易失去正确的索引轨道。

相反,尝试在最后一次删除所有 b 的元素:

b.clear();

附注:有一种更简单的方法可以使用 std::vector::insert() 将 vector 附加到另一个 vector 上这样您所需要的就是:

a.insert( a.end(), b.begin(), b.end() );
b.clear();

关于c++ - 我无法正确删除 vector 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23421119/

相关文章:

C++ 使用来自另一个标识符下的头文件的包含类

c++ - queue<T> 上的原子操作?

c++ - 使用 boost 进行半无限积分

c - 如何将 char * 放入数组中,以便我可以在 qsort 中使用它,然后转到下一行

c++ - 将 vector 字符串传递给参数 vector 数组

c++ - glm::dot 返回一个 vector

c++ - 调用 always_inline '__m256d _mm256_broadcast_sd(const double*)' 时内联失败

c - 使用指针时将二维数组用作多个一维数组

c++ - nullptr = 节点分配不正确

c++ - 如何在一行中检查 std::vector 中是否存在元素?