检查整个向量是否为零

时间:2013-11-21 21:38:56

标签: c++ vector

如何检查向量中的每个元素是否为零而不通过它们进行循环?

目前我有(以半MEW形式): 这试图做的是检查最终向量的所有三个值(它的三维......年份)是否都是零,(在原点),或者它是否等于所有三个值上的任何先前向量。

        siteVisited = false; counter = 0;  
        while (counter < (walkHist.back().size()-1))
        {
            tdof = 1;
            while (tdof <= dimensions)
            {
                if (walkHist.back().back().at(tdof-1) == 0)
                {
                    siteVisited = true;
                }
                else
                {
                    siteVisited = false;
                    break;
                }
                tdof++;
            }
            if (siteVisited)
            {
                goto visited;
            }

            tdof = 1;
            while (tdof <= dimensions)
            {
                if (walkHist.back().back().at(tdof-1) == walkHist.back().at(counter).at(tdof-1))
                {
                    siteVisited = true;
                }
                else
                {
                    siteVisited = false;
                    break;
                }
                tdof++;
            }
            if (siteVisited)
            {
                                visited:
                ...
            }
            counter++;
        }

2 个答案:

答案 0 :(得分:23)

这取决于循环的含义,但这可行:

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

答案 1 :(得分:1)

检查的原因很重要。如果归零的数组很重要,并且定期检查,那么每当添加或更改值时,都需要对向量进行子分类以设置标志。这会增加所有添加,删除和修改的开销,但会使“一切为零”测试快速。

如果您的数组经常被归零,则可能值得编写自己的稀疏数组类(可能基于map)。添加非零项目或将元素更改为非零时,将其输入到地图中。当更改为0时,它将被删除。现在您知道所有元素是否为零,因为地图将为空。这也有使用更少内存的好处。

但是,如果检查归零数组相对较少,那么任何非零中断的循环都可以正常工作。然而,它确实意味着最慢的检查将全部为零,这是值得记住的。