c++ - 删除 vector 中的元素

标签 c++ vector erase erase-remove-idiom

所以我有一个无符号整数 vector ( vector<unsigned int> 称为 vector1 )。我有另一个我创建的结构 vector ( vector<struct> 称为 vector2 )。 vector<int>包含一个整数,它是 vector<struct> 的索引.例如,假设 vector<int = {5, 17, 18, 19} .这意味着 vector2.at(5) == vector2.at(vector1.at(0)) .

在结构中,我有一个名为 var 的 bool 变量.在大多数情况下,var是假的。我想删除 vector1 中的所有元素有 var = 真。

我所做的是:

for (unsigned int i = 0; i < vector1.size(); i++)
{
   if (vector2.at(vector1.at(i)).var)
    vector1.erase(vector.begin() + i);
}

唯一的问题是它不会删除所有的真实元素。我已经多次运行 for 循环以删除所有值。这是正确的行为吗?如果不是,我哪里出错了?

最佳答案

您必须使用 erase-remove idiom从 vector 中删除元素。

v.erase(std::remove(v.begin(), v.end(), value), v.begin);

std::remove 将元素移动到 vector 的末尾,erase 将从 vector 中删除元素。

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

相关文章:

ios - 删除在 UIImage 上绘制的 UIBezirePath 线

C++:动态创建以for循环迭代器命名的数组

c++ - 推送到 vector 的 vector 时出错

c++ - D 构建过程

r - 比较向量值

c++ - 如何将 "new"数组成员的地址传递给 vector

从 Linux 目录中删除点文件的 PHP 脚本

c++ - 从 std::vector 删除元素时出现运行时错误

C++:预期的构造函数、析构函数或类型转换

c++ - 从微软的 STL 切换到 STLport