我先描述一下更高层次的目标。我有一个布尔矩阵(我使用
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 的索引列表,并传入索引列表并同时删除所有这些行。有没有办法在容器库的功能中做到这一点?
这完成了工作:
#include <vector>
#include <algorithm>
bool is_row_true(const std::vector<bool>& row) {
return std::all_of(row.begin(), row.end(), [](bool val) {return val; });
}
int main()
{
std::vector<std::vector<bool>> mat{ {true, false},{true, true}, {true, true} };
std::erase_if(mat, [](auto& x) {return is_row_true(x); });
}