序列式容器————vector
Posted pacino12134
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列式容器————vector相关的知识,希望对你有一定的参考价值。
目录
介绍
1 创建
2 容量和大小
size()
capacity()
3 resize()
4 reverse()
5 获取元素
front()
back()
6 迭代器(待补充)
7 push_back()
8 emplace_back()
9 emplace()(待补充)
10 insert()
11 clear()
12 remove()
13 pop_back()
14 shrink_to_fit()
15 erase()
介绍
和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长。在大多数时候,都可以用 vector<T> 代替数组存放元素。只要能够意识到,vector<T> 在扩展容量,以 及在序列内部删除或添加元素时会产生一些开销;但大多数情况下,代码不会明显变慢。
为了使用 vector<T> 容器模板,需要在代码中包含头文件 vector。
1 创建
vector<int> a ; //声明一个int型向量a vector<int> a(10) ; //声明一个初始大小为10的向量 vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量 vector<int> b(a) ; //声明并用向量a初始化向量b vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
数组的初始化:
int n[] = 1, 2, 3, 4, 5 ; vector<int> a(n, n+5) ; //将数组n的前5个元素作为向量a的初值 vector<int> a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
2 容量和大小
vector 的容量大小,是指在不分配更多内存的情况下可以保存的最多元素个数,vector 的大小是它实际所包含的元素个数,也就是有值的元素的个数。
vector 的大小不能超出它的容董。当大小等于容量时,增加一个元素就会导致更多内存的分配。
(1)size()
返回大小,无符号整型值
(2)capacity()
返回容量,无符号整型值
3 resize()
改变容器大小。
std::vector<int> values 1,2,3; values.resize (5); //把元素的个数变为参数指定的值,所以会增加两个用默认值初始化的元素。 //如果添加了一个元素,导致超过当前容器的容景,容量会自动增加。 values.resize (7, 99); //将容器大小设为7,并用99来初始化新增的元素 //若7<原来的容器大小,那么就删除多余的元素
4 reverse()
改变容器容量(元素个数,整型)。
5 获取元素
使用下标索引[]
(1)front
返回第一个元素的引用
(2)back
返回最后一个元素的引用
因为成员函数 front() 和 back() 返回的是引用,所以它们可以出现在赋值运算符的左边。
values.front() = 2.71828;
6 迭代器
1 //全部输出 2 vector<int>::iterator t ; 3 for(t=a.begin(); t!=a.end(); t++)//t就是迭代器,表示元素位置,还可以前后移动 4 cout<<*t<<" " ;//*t为指针的间接访问形式,是访问t指向的元素值
7 push_back()
8 emplace_back()
emplace_back() 的参数正是添加到容器中的对象的构造函数所需要的参数。
emplace_back() 用它的参数作为构造函数的参数,在容器中生成对象。如果不想使用移动运算,使用 push_back()。
可以在 emplace_back() 函数中使用尽可能多的参数,只要它们满足对象构造函数的要求。这里有一个使用多参数的 emplace_back() 的示例:
std::string str "alleged"; words.emplace_back(str, 2, 3); //生成一个string对象(alleged的索引2开始的三个元素组成):leg,然后将leg添加到words字符串后面
9 emplace()
通过使用成员函数 emplace(),可以在 vector 序列中插入新的元素。对象会在容器中直接生成,而不是先单独生成对象,然后再把它作为参数传入。
10 insert()
11 clear()
std::vector<int> data(100, 99);// Contains 100 elements initialized to 99 data.clear(); // Remove all elements
移除了所有的元素,因此大小变为 0,因为这个操作并没有改变容器的容量,所以容量还是 100。
12 remove()
remove() 算法由定义在 algorithm 头文件中的模板生成,它可以删除匹配特定值的一段元素。
13 pop_back()
14 shrink_to_fit()
去掉容器中多余的容量,例如不再向容器中添加新元素。
data.shrink_to_fit();
15 erase()
删除容器中的一个或多个元素。如果只删除单个元素,那么只需要提供一个参数
auto iter = data.erase(std::begin(data)+1); //Delete the second element
以上是关于序列式容器————vector的主要内容,如果未能解决你的问题,请参考以下文章
STL浅析——序列式容器vector的构造和内存管理: constructor() 和 push_back()