vector容器


本文总阅读量

vector是种容器,类似数组一样,但它可以动态改变长度。
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表示选取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);
}

二、遍历写法

前面已经有一种遍历写法了,vector容器下标从0开始,所以类似string写法。
1.下标遍历写法1

for(int i = 0; i < a.size(); i++)

2.c++11写法

for(auto x: a){
	cout<<x<<" ";
}

如果不需要用到下标,建议用c++11用法。

三、二维vector容器

图论中模拟链接表可以用二维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的内存分配器

本站总访问量