序列式容器————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的主要内容,如果未能解决你的问题,请参考以下文章

序列式容器------vector类模板

序列式容器————vector

STL浅析——序列式容器vector的构造和内存管理: constructor() 和 push_back()

STL 源码剖析读书笔记四:序列式容器之 dequestackqueue

序列式容器

stl源码剖析-序列式容器 之 list