如何检查向量中的每个元素是否为零而不通过它们进行循环?
目前我有(以半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++;
}
答案 0 :(得分:23)
这取决于循环的含义,但这可行:
bool zeros = std::all_of(v.begin(), v.end(), [](int i) { return i==0; });
答案 1 :(得分:1)
检查的原因很重要。如果归零的数组很重要,并且定期检查,那么每当添加或更改值时,都需要对向量进行子分类以设置标志。这会增加所有添加,删除和修改的开销,但会使“一切为零”测试快速。
如果您的数组经常被归零,则可能值得编写自己的稀疏数组类(可能基于map)。添加非零项目或将元素更改为非零时,将其输入到地图中。当更改为0时,它将被删除。现在您知道所有元素是否为零,因为地图将为空。这也有使用更少内存的好处。
但是,如果检查归零数组相对较少,那么任何非零中断的循环都可以正常工作。然而,它确实意味着最慢的检查将全部为零,这是值得记住的。