如何检查二维向量中的所有元素是否为零?

Jos*_*ant 5 c++ vector

我在 Stack Overflow 上发现,这个语句可以用来判断向量的所有元素是否为零,但这仅适用于一维向量。

bool zeros = std::all_of(v.begin(), v.end(), [](int i) { return i==0; });
Run Code Online (Sandbox Code Playgroud)

我如何修改它以便它可以用于二维矢量?

是否可以只用一条语句来实现?

Yam*_*ari 4

像这样(假设你的意思是一个嵌套向量):

#include <algorithm>
#include <vector>

int main() {
  std::vector<std::vector<int>> vs;

  std::all_of(vs.begin(), vs.end(), [](const std::vector<int>& v) {
    return std::all_of(v.begin(), v.end(), [](int x) { return x == 0; });
  });
}
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

bool check0(const std::vector<std::vector<int>> &vs) {
    for(const auto& v : vs) {
        for(auto x : v) {
            if(x != 0) {
                return false;
            }
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里比较两个版本的反汇编:https ://godbolt.org/z/YzdW7x 。