从向量中选择特定元素

新手上路,请多包涵

我有一个向量 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 许可协议

阅读 231
1 个回答
size_t last = 0;
for (size_t i = 0; i < v1.size(); i++) {
  if (v2[i]) {
    v1[last++] = v1[i];
  }
}
v1.erase(v1.begin() + last, v1.end());

本质上与您的相同,只是它可以就地工作,不需要额外的存储空间。这基本上是对 std::remove_if 的重新实现(这很难直接使用,因为它使用的函数对象被赋予了一个值,而不是容器中的索引或迭代器)。

原文由 Igor Tandetnik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题