泛型算法:查找元素算法find()

    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()函数的执行步骤:

  1. 访问序列中的首元素
  2. 比较首元素与要找的元素
  3. 匹配则返回首元素的指针
  4. 否则就重复前进执行步骤2和3
  5. 到达末尾未找到返回参数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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值