序列式容器————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

原文地址:https://www.cnblogs.com/pacino12134/p/11441882.html

时间: 2024-08-30 00:43:19

序列式容器————vector的相关文章

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

咱们先来做一个测试capacity是容器容量,size是大小: #include <iostream> #include <vector> using namespace std; int main(){ vector<int> result; for (int i = 0; i < 17; i++) { result.push_back(i); printf("element count: %d\t", result.size()); pri

STL:序列式容器vector总结

说起数组我们都不陌生,但在C++中,除了数组还多了一个"新朋友"那就是vector.其实vector本质上与array的数据安排以及操作方式也其为相似.它俩唯一的差别就是空间灵活性. 无论在C语言还是C++中,array的空间一旦申请完成就不能进行更改,如果需要更大空间来存储数据,便得重新申请一个新的数组并将原来的数值拷贝过去,然后再将原来数组释放,而这一切都需要用户自己完成.而vector不同的是,它的空间分配更加灵活,当他内存不够存放时,它内部机制会自行进行容量扩充,这对于程序员来

序列式容器----vector

版权声明:本文为博主原创文章,未经博主允许不得转载.

C++ STL序列式容器优缺点记录

STL中有三种序列式容器vector,list,deque.对其分别进行性能介绍 vector: vector内部是通过连续的动态内存空间(dynamic array)去管理的,每push_back一个元素,将安插到array尾部. 这种通过连续的内存空间去管理的方式,可以方便我们去通过下标索引到值,在其尾部的插入和删除效率都非常之高. 当在vector内部去进行插入和删除则会导致vector容器元素去移动位置,因此效能较差 deque: deque是一个双端队列,可在首尾进行元素的插入和删除.

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

vector的数据安排以及操作方式,与array(c++自身提供的序列式容器)非常相似.两者唯一的差别在于空间的运用的灵活性.array是静态空间,一旦配置了将不能随意更改其大小,若要更改需要重新配置一块新的空间,如何将元素从旧址中一一搬迁,再释放原来的系统.而vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间已容纳新元素.(实际vector每次动态分配的空间大小是有限的,超过了这个临界值同样是要像array一样进行元素搬迁,下面将会进行详细介绍)vector 是最常用的 C++

STL学习笔记(序列式容器)

Vector Vector是一个动态数组. 1.Vector的操作函数 构造.拷贝和析构 vector<Elem> c //产生一个空vector ,其中没有任何元素 vector<Elem> c1(c2) //产生另一个同型vector的副本,(所有元素都被拷贝) vector<Elem> c(n) //利用元素的default构造函数生成一个大小为n的vector vector<Elem> c(n,elem) //产生一个大小为n的vector,每个元素

序列式容器

目录 容器结构分类 通过萃取机traits萃取迭代器的型别 容器list list的定义 list的node定义 list的iterator 容器vector vector的定义 vector的iterator vector 的大小 array array的定义 forward_list forward_list与list的区别 deque deque的定义 deque的iterator 容器结构分类 这里的衍生,并非继承关系,而是一种包含关系. 例如heap中包含一个vector. 通过萃取机

Ch4 序列式容器(下)

4.7 heap(隐式表述:implicit representation) 4.7.1 heap概述 binary max heap作为priority queue的底层机制,原因是: binary heap:完全二叉树的结构可以保证整棵树没有节点漏洞,用array来表示这棵树的时候,只需要从array[1]开始保存(#0元素设为无限大或无限小),那么位于array第i个的节点,其左子节点就是第2*i个,右子节点是第2*i+1个,父节点是第i/2(向下取整)个.--这种以array表述tree

《STL源码剖析》读书笔记之序列式容器(3)

1.heap heap不属于STL容器组件,它是priority queue的底层实现机制. (1)push_heap算法 向堆中加入元素,首先将要加入的元素放到堆所在数组的末端,然后再对这个元素进行上溯操作,直到新堆合法为止.如下图所示: (2)pop_heap算法 pop_heap操作取走堆中的最大(小)值.根据堆的特性,堆的最大(小)值必定是堆所存数组的第一个元素.取堆的最大(小)元素时,将堆的最后一个元素和堆的第一个元素互换,然后再对第一个元素进行下溯操作,直到新堆满足堆的定义.下图给出