c++ 给定一个索引列表,如何从std::vector中删除这些元素?

tvz2xvvm  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(103)

让我先描述一下更高层次的目标,我有一个布尔值矩阵(我用std::vector<std::vector<bool>>表示)。
我想删除整行都是true值的所有行。
目前,我做:

bool is_row_true(const vector<bool>& row) {
  return all_of(row.begin(), row.end(), [](bool val) {
    return val;
  });
}

for (int i = 0; i < mat.size(); ++i) {
    if (is_row_true(mat[i])) {
      std::erase(mat.begin() + i);
    }
}

字符串
然而,这似乎效率很低。相反,我考虑获取行都为true的索引列表,并传入索引列表并同时删除所有这些行。有没有一种方法可以在容器库中的功能中做到这一点?

jk9hmnmh

jk9hmnmh1#

这样做的工作:

#include <vector>
#include <algorithm>

int main()
{
    std::vector<std::vector<bool>> mat{ {true, false},{true, true}, {true, true} };
    std::erase_if(mat, [](auto& x) {return std::all_of(x.begin(), x.end(), [](bool val) {return val; }); });
}

字符串
它比remove-erase习惯用法简单,但只适用于c++20或更高版本。

相关问题