21xrx.com
2024-12-27 19:12:44 Friday
登录
文章检索 我的文章 写文章
C++ vector的查找方法
2023-07-03 19:31:51 深夜i     --     --
C++ vector 查找方法

C++中,vector是一种可变大小的序列容器,它提供了许多常规数组所不具备的高级功能,包括动态调整数组大小、内部存储元素的内存管理、同时支持迭代器和普通索引访问等等。在实际开发中,经常会涉及到在vector中查找元素的操作,因此在这里介绍几种vector的查找方法。

1. find函数

vector提供了一个名为find的成员函数,它可以在vector中查找某个元素,并返回该元素的迭代器。如果找到了该元素,则返回指向该元素的迭代器,否则返回指向vector末尾的迭代器end()。

例如,以下代码中的v是一个vector 容器,通过调用find函数查找元素5:


vector<int> v = 2;

auto it = find(v.begin(), v.end(), 5); // 查找元素5

if (it != v.end()) {

  cout << "Found at position " << distance(v.begin(), it) << endl;

} else

  cout << "Not found" << endl;

在这个例子中,find函数返回一个迭代器it,指向vector中值为5的元素。distance函数可以计算出两个迭代器之间的距离,因此distance(v.begin(), it)返回了该元素在vector中的位置(下标从0开始)。

2. count函数

如果只需要查找某个元素是否在vector中出现过,可以使用count函数。count函数返回一个整数,表示该元素在vector中出现的次数。

例如,以下代码中的v是一个vector 容器,通过调用count函数查找元素4的出现次数:


vector<int> v = 4;

int count = count(v.begin(), v.end(), 4); // 查找元素4的出现次数

cout << "Count: " << count << endl;

在这个例子中,count函数返回3,因为元素4在vector中出现了3次。

3. lower_bound和upper_bound函数

如果vector中的元素已经排好序,可以使用lower_bound和upper_bound函数在其中查找元素。lower_bound函数返回一个迭代器,指向第一个不小于给定值的元素,upper_bound函数返回一个迭代器,指向第一个大于给定值的元素。

例如,以下代码中的v是一个已经按照从小到大的顺序排好的vector 容器,通过调用lower_bound和upper_bound函数查找元素3:


vector<int> v = 4;

auto lb = lower_bound(v.begin(), v.end(), 3); // 查找第一个不小于3的元素

auto ub = upper_bound(v.begin(), v.end(), 3); // 查找第一个大于3的元素

cout << "Lower bound: " << distance(v.begin(), lb) << endl;

cout << "Upper bound: " << distance(v.begin(), ub) << endl;

在这个例子中,lower_bound函数返回一个迭代器,指向元素3,因为3是v中第一个不小于3的元素。upper_bound函数返回一个迭代器,指向元素4,因为4是v中第一个大于3的元素。通过distance函数可以计算出它们在vector中的位置。

总之,vector提供了多种方法来查找其中的元素,开发者可以灵活运用它们来实现自己的需求。需要注意的是,在使用其中的函数时,应该首先根据实际情况选择合适的查找方法,避免不必要的时间和空间开销。

  
  

评论区

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