21xrx.com
2024-06-02 23:06:41 Sunday
登录
文章检索 我的文章 写文章
C++ STL中的list如何进行二分查找?
2023-07-06 13:19:42 深夜i     --     --
C++ STL list 二分查找

在C++ STL标准模板库中,list是一种双向链表容器。相较于数组、向量等容器,list有着更加方便的元素插入、删除操作,并且具有更加稳定的迭代操作。然而,由于其链表的特性,list并不支持随机访问,也就是说不能直接使用二分查找算法来查找元素。但是,STL为我们提供了其他方式来实现二分查找。

STL中提供了一个相对应的容器叫做vector,可以随机访问其元素。因此我们可以先将list中的元素复制到vector中进行查找,在将查找结果映射到原list中。

下面是代码示例:


#include<iostream>

#include<list>

#include<vector>

#include<algorithm>

using namespace std;

int main() {

  list<int> l = 4;

  vector<int> v(l.begin(),l.end());

  //使用sort进行排序

  sort(v.begin(),v.end());

  //使用二分查找算法查找元素5

  auto it = lower_bound(v.begin(),v.end(),5);

  //映射结果到原list中

  auto pos = distance(v.begin(),it);

  auto list_iter = l.begin();

  advance(list_iter,pos);

  if (*list_iter == 5)

    cout<<"找到了元素5"<<endl;

  

  else

    cout<<"未找到元素5"<<endl;

  

  return 0;

}

上述代码的输出结果为:找到了元素5。

通过上述代码,可以看出,STL中的list虽然不能直接进行二分查找,但是我们可以通过将其转化为vector进行查找,然后将查找结果映射到原list中,达到类似的效果。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复