最好的方法是什么。
例如。我有
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;
}
}
谢谢, Gunjan
答案 0 :(得分:7)
您可以使用:
distance( begin(temp), find_if( begin(temp), end(temp), [](auto x) { return x != 0; }));
如果找不到该项,则返回数组的大小。您将需要#include <algorithm>
和C ++ 14编译模式。在C ++ 11中,您必须将auto
替换为int
或容器包含的任何类型。
Here是一个具有可重用lambda的版本,可能稍微容易阅读。需要C ++ 14。
答案 1 :(得分:1)
与第一个答案一样,只需使用import AsyncStorage from '@react-native-community/async-storage';
export const getItem = async() => {
try {
const value = await AsyncStorage.getItem('@storage_token');
if( value !== null ) {
return JSON.parse(value);
}else {
return null;
}
} catch (error) {
console.log(error);
return null;
}
}
而不是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 :(得分:0)
最简单的方法是显而易见的方式:
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算法的尝试都会使代码膨胀。
答案 3 :(得分:0)
您可以使用以下功能:
int FindSmallerIndex(const std::vector<int> & vec)
{
int kMin=0;
while(vec[kMin]==0)
{
kMin += 1;
}
return kMin;
}
答案 4 :(得分:0)
更多通用解决方案!
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';