vector是变长数组,支持随机访问,不支持在任意位置O(1)插入。为了保证效率,元素的增删一般应该在末尾进行。
引用数组
C++中vector
的实现在<vector>
头文件和std
命名空间中,在代码开头引用这个头文件。
#include <vector>
using namespace std;
构造⼀个动态数组
C++ 中直接构造⼀个 vector 的语句为:
vector<type> vec; //type可以是int char string ...
初始化
- 方式1:定义具有6个整数元素的向量,每个元素初值任意.
vector<int> v(6);
- 方式2:定义具有6个整数元素的向量,每个元素初值为1.
vector<int> v(6,1);
- 方式3:将向量b赋值给向量v.
vector<int> v(b);
vector<int> v(b,b+n);
vector<int> v(b.begin(),b.end());
- 方式4:将向量b的前三个元素赋值给向量v.
vector<int> v(b,b+3);
vector<int> v(b.begin(),b.begin()+3);
- 方式5:直接赋值.
vector<int> v{7,8,9};
常用函数
方法 | 说明 |
---|---|
size() | 取向量的长度 |
push_back(x) | 在尾部加入一个元素x |
pop_back() | 删除最后一个元素 |
empty() | 判断容器是否为空 |
front() | 取第一个元素 |
back() | 取最后一个元素 |
begin() | 头元素的地址 |
end() | 尾元素的下一个地址 |
erase(pos) | 删除pos位置的元素,传回下一个元素的位置(pos是迭代器) |
erase(begin,end) | 删除其左闭右开区间的元素,传回end(begin,end是迭代器) |
insert(pos,x) | 在pos位置插入x,传回新元素的位置 |
resize(n) | 保留前n个元素 |
clear() | 清空容器 |
附:
size() 调用方式: int n = v.size();
实例
- 元素去重
为实现
{1,1,2,2,3,4,4}
→{1,2,3,4}
用到sort()、unique()、erase()
步骤一:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v{ 1,1,2,2,3,4,4 };
unique(v.begin(),v.end());
for (auto x : v) cout << x << " ";
return 0;//output:1 2 3 4 3 4 4
}
- 输出的结果后3个没变,因为有三个重复的元素。
- 前4个元素为处理后的效果,各不相同。
步骤二:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v{ 1,1,2,2,3,4,4 };
v.erase(unique(v.begin(),v.end()),v.end());
for (auto x : v) cout << x << " ";
return 0;//output:1 2 3 4
}
- 用unique()传回的地址,即元素3的地址{1,2,3,4,
3
,4,4}。 - 结合erase()删去无效的元素。
- 逆序赋初值
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v{ 1,2,3 };
vector<int> u(v.rbegin(),v.rend());
for (auto x : u) cout << x << " ";
return 0;//output:3 2 1
}
- 快速查看某个元素的下标(默认)
#include <iostream>
#include <algorithm>
#include <vector>
#include <deque>
using namespace std;
int main()
{
vector<int> q; // deque在此处类似
q.push_back(6);
q.push_back(2);
q.push_back(1);
cout<<find(q.begin(),q.end(),2)-q.begin();
// 返回2的下标
// 期望的值:0、1、2
return 0;
}
轻松一下
戴上耳机,享受电音带来的视觉盛宴吧!【如有错误,敬请留言】