我有一个向量 v1
和一个布尔向量 v2
大小相同。我想从 v1
中删除所有值,使得 v2
的并行元素是 false
:
vector<int> v3; // assume v1 is vector<int>
for (size_t i=0; i<v1.size(); i++)
if (v2[i])
v3.push_back(v1[i]);
v1=v3;
有更好的方法吗?
- 在 C++03 中
- 在 C++11 中
原文由 user31264 发布,翻译遵循 CC BY-SA 4.0 许可协议
本质上与您的相同,只是它可以就地工作,不需要额外的存储空间。这基本上是对
std::remove_if
的重新实现(这很难直接使用,因为它使用的函数对象被赋予了一个值,而不是容器中的索引或迭代器)。