std::vector<int> vec{1,2,3,4,5,6};
auto result = std::find(vec.begin(),vec.end(),99);
qDebug()<<"查找结果"<< (result == vec.end());
前两个参数是迭代器,没找到则返回第二个参数,所以用result == vec.end()判断查找结果。
QT的容器也能用:
QStringList list;
list<<"aa"<<"bb"<<"cc"<<"dd";
qDebug()<<*std::begin(list);
auto listFindResult = std::find(std::begin(list),std::end(list),"cc");
qDebug()<<"查找结果(是否等于未找到):"<< (listFindResult == std::end(list))<<*listFindResult;
这里用到了标准库的begin和end函数,分别用来获取首元素和和尾元素之后位置的指针。
注:迭代器就是指针。
find()函数的执行步骤:
- 访问序列中的首元素
- 比较首元素与要找的元素
- 匹配则返回首元素的指针
- 否则就重复前进执行步骤2和3
- 到达末尾未找到返回参数2
这些步骤不依赖于容器类型,甚至不管是不是容器,只要有头尾指针就可以这样操作。
如QJsonArray定义了begin()、end()迭代器,就可以使用find()算法:
QJsonArray array;
QJsonObject obj1;
obj1["xx1"] = "xx1";
array.append(obj1);
QJsonObject obj2;
obj2["xx2"] = "xx2";
array.append(obj2);
QJsonObject obj3;
obj3["xx3"] = "xx3";
array.append(obj3);
QJsonObject obj4;
obj4["xx4"] = "xx4";
array.append(obj4);
auto jsonArrayFindResult = std::find(std::begin(array),std::end(array),obj4);
qDebug()<<"查找结果(是否等于未找到):"<< (jsonArrayFindResult == std::end(array))<<*jsonArrayFindResult;
数组类型:
int array[10];
for(int i = 0;i < 10;++i)
array[i] = i;
auto result = std::find(std::begin(array),std::end(array),4);
qDebug()<<(*result);//4