[英]How to get index of first non zero value in a vector<int> in c++
做这个的最好方式是什么。
例如。 我有
Vector<int> temp = {0,0,1,0,2}
我想获得 temp 中第一个非零值的索引。 所以在这种情况下,我想要答案 2。
我已经在这样做了,正在寻找更好的方法..
int index = -1;
for(int round=0; round < temp.size(); round++)
{
if(temp[round] > 0)
{
index = round;
break;
}
}
谢谢,贡詹
您可以使用:
distance( begin(temp), find_if( begin(temp), end(temp), [](auto x) { return x != 0; }));
如果未找到该项目,这将返回数组的大小。 您将需要#include <algorithm>
和 C++14 编译模式。 在 C++11 中,您必须将auto
替换为int
或容器包含的任何类型。
这是一个带有可重用 lambda 的版本,可能更容易阅读。 需要 C++14。
像第一个答案一样,只需使用std::find_if_not
而不是std::find_if
。
bool IsZero(int i) {
return i == 0;
}
int main() {
vector<int> temp = {0, 0, 1, 0, 2};
auto it = find_if_not(a.begin(), a.end(), IsZero);
int first_nonzero_idx = distance(temp.begin(), it);
return first_nonzero_idx;
}
输出是:
2
您可以使用以下功能:
int FindSmallerIndex(const std::vector<int> & vec)
{
int kMin=0;
while(vec[kMin]==0)
{
kMin += 1;
}
return kMin;
}
最简单的方法是显而易见的方法:
int index = 0;
for(; index < temp.size(); index++) if(temp[index]) break;
if(index == temp.size()) {
//no such element
} else {
//first non-zero element is temp[index]
}
任何使用 stdlib 算法的尝试只会使您的代码膨胀。
更通用的解决方案!
std::vector<int> a{0, 0, -1, 1, 0};
std::cout << std::distance(a.begin(),
std::find_if(a.begin(), a.end(),
[](const auto& x) { return x; }))
<< '\n';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.