vector容器
本文总阅读量次
- 随机访问元素->常数
- 在末尾插入或移除元素->均摊常数
- 非末尾插入或移除元素->与到
结尾的距离成线性 ,跟数组一样,插入删除会造成大量数据移动。
不罗列所有的用法,只学习常用的方法。
一、vector初始化
1.当成数组用法
vector<int> a(20); //定义20个元素
for(int i = 0; i < a.size(); i++) //输入
cin>>a[i];
for(int i = 0; i < a.size(); i++) //输出
cout<<a[i]<<" ";
2.初始化为固定值
vector<int> a(5,1);
3.从其他vector复制一段
vector<int> b(5,1);
vector<int> a(b.begin(),b.begin()+3);
其中b.begin()
表示b容器的第一个元素地址,b.begin()+3
表示选取
相应的,end()
表示最后一个元素的后一个地址,一般表示结束。
4.动态用法
//假设a容器保存偶数
vector<int> a;
cin>>n;
for(int i = 1; i <= n; i++){
int x;
cin>>x;
if(x%2==0) a.push_back(x);
}
二、遍历写法
前面已经有一种遍历写法了,
1.下标遍历写法1
for(int i = 0; i < a.size(); i++)
2.c++11写法
for(auto x: a){
cout<<x<<" ";
}
如果不需要用到下标,建议用
三、二维vector容器
图论中模拟链接表可以用二维
vector<int> G[10005]; //比如有10000个顶点
无向图保存
for(int i = 1; i <= m; i++){
cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
属性及操作 (简单了解即可)
Iterators
Name | Description |
---|---|
begin | 返回指向迭代器第一个元素的指针 |
end | 返回指向迭代器最后一个元素的指针 |
rbegin | 返回迭代器逆序第一个元素的指针 |
rend | 返回迭代器逆序最后一个元素的指针 |
cbegin | 返回常量迭代器的第一个元素的指针 |
cend | 返回常量迭代器的最第一个元素的指针 |
crbegin | 返回常量迭代器逆序的第一个元素的指针 |
crend | 返回常量迭代器逆序的最后一个元素的指针 |
Capacity
Name | Description |
---|---|
size | 返回当前vector使用数据量的大小 |
max_size | 返回vector最大可用的数据量 |
resize | 调整vector中的元素个数 |
capacity | 返回vector中总共可以容纳的元素个数 |
empty | 测试vector是否是空的 |
reserve | 控制vector的预留空间 |
shrink_to_fit | 减少capacity到size的大小 |
Element access
Name | Description |
---|---|
operator[] | 在[]中可以做运算 |
at | vector.at(i)相当于vector[i] |
front | 返回第一个元素的值 |
back | 返回最后一个元素的值 |
data | 返回指向vector内存数据的指针 |
Modifiers
Name | Description |
---|---|
assign | 指定vector内容 |
push_back | 在容器的最后一个位置插入元素x |
pop_back | 删除最后一个元素 |
insert | 插入元素 |
erase | 擦除元素 |
swap | 交换两个容器的内容 |
clear | 将容器里的内容清空,size值为0,但是存储空间没有改变 |
emplace | 插入元素(与insert有区别) |
emplace_back | 在容器的最后一个位置插入元素x(与push_back有区别) |
Allocator
Name | Description |
---|---|
get_allocator | 返回vector的内存分配器 |