C++篇——vector数组

本文详细介绍了C++ STL中的vector容器,一种可变长的动态数组。它支持随机访问迭代器,允许快速的尾部添加和常数时间的元素访问。文章还探讨了vector的构造函数、成员函数如push_back()、pop_back()等,以及如何使用二维vector实现矩阵操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector动态数组

介绍:
可变长的动态数组
必须包含头文件 #include
支持 随机访问迭代器
• 根据下标随机访问某个元素时间为常数
• 在尾部添加速度很快
• 在中间插入慢
所有STL算法 都能对vector操作

vector的成员函数:
构造函数
vector(); 无参构造函数, 将容器初始化成空的
vector(int n); 将容器初始化成有n个元素
vector(int n, const T & val); 假定元素类型是T, 将容器初始化成有n个元素, 每个元素的值都是val
vector(iterator first, iterator last); 传递两个迭代器:将容器初始化为与别的容器上区间[first, last)一致的内容。

常用到的函数:
void pop_back(); 删除容器末尾的元素
void push_back(const T & val); 将val添加到容器末尾
int size(); 返回容器中元素的个数
T & font(); 返回容器中第一个元素的引用
T & back(); 返回容器中最后一个元素的引用

二维数组:

vector< vector<int> v(3)

v有3个元素,
每个元素都是vector 容器

### C++ 中 `vector` 的查找方法 在 C++ 编程语言中,标准模板库(STL)提供了多种用于查找容器内元素的方式。对于 `std::vector<int>` 类型的数据结构,可以采用以下几种常见的查找方式来定位目标值。 #### 方法一:使用 `count` 通过调用 `<algorithm>` 头文件中的函数 `std::count` 来统计某个特定值在向量中的出现次数。如果返回的结果大于零,则表示该值存在于向量之中[^1]。 ```cpp #include <iostream> #include <vector> #include <algorithm> bool contains(const std::vector<int>& v, int key) { return std::count(v.begin(), v.end(), key) > 0; } ``` #### 方法二:利用 `find` 同样来自 `<algorithm>` 库的另一个工具——`std::find` 可以帮助我们寻找第一个匹配指定条件的位置迭代器。当此位置不等于结束标记时意味着成功找到了对应项。 ```cpp #include <iostream> #include <vector> #include <algorithm> bool exists_in_vector(const std::vector<int>& vec, const int& value){ auto it = std::find(vec.begin(), vec.end(), value); if(it != vec.end()) return true; else return false; } ``` #### 方法三:借助 lambda 表达式的 `find_if` 为了满足更复杂的查询需求,比如基于自定义逻辑判断某条记录是否存在,我们可以结合匿名函数(lambdas expressions) 和 STL 提供的功能一起工作。下面的例子展示了如何创建一个接受额外参数并执行相应测试的标准谓词对象: ```cpp #include <iostream> #include <vector> #include <algorithm> template<typename T> bool custom_find(std::vector<T> &v,T target,int extra_param){ return std::find_if(v.begin(),v.end(), [target,&extra_param](const T& elem)->bool{ // Replace with actual condition. return (elem * extra_param)==target ; })!=v.end(); } // Example usage within main function or another context... if(custom_find(myVector,someValue,anotherParam)){ std::cout << "Element found!"<<std::endl; } else { std::cout << "Not Found."<<std::endl; }; ``` #### 方法四:先排序再应用 `binary_search` 假如数据集允许预处理或者本身已经有序排列的话,那么还可以考虑效率更高的算法如折半查找(binary search),它的时间复杂度仅为 O(log n) 。不过需要注意的是,在调用之前必须确保整个序列按照升序整理完毕才行哦! ```cpp #include <bits/stdc++.h> using namespace std; void prepare_and_check(vector<int> &arr, int k){ sort(arr.begin(), arr.end()); cout<<(binary_search(arr.begin(), arr.end(),k)? "Yes":"No")<<"\n"; } ``` 以上就是关于 C++ 中针对 `vector` 进行高效查找的一些常用技巧及其具体实现代码片段啦!希望对你有所帮助~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值