c++ -- STL容器--vector

STL中最常用的容器为Vector,可以理解为数组

3.vector容器

3.1 简介

① vector数据结构和数组非常相似,也称为单端数组。

② vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展。

③ 动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。

④ vector容器的迭代器是支持随机访问的迭代器。

3.2 构造函数

① 功能描述:创建vector容器

② 函数原型:

  1. vector v;

  1. vector(v.begin(), v,end()); //将v[begin().end())区间(前闭后开)中的元素拷贝给本身。

  1. vector(n, elem); //构造函数将n个elem拷贝给本身

  1. vector(const vector &vec); //拷贝构造函数

运行结果:

  • 0 1 2 3 4 5 6 7 8 9

  • 0 1 2 3 4 5 6 7 8 9

  • 100 100 100 100 100 100 100 100 100 100

  • 100 100 100 100 100 100 100 100 100 100

  • 请按任意键继续. . .

3.3 赋值操作

① 功能描述:给vector容器进行赋值。

② 函数原型:

  1. vector& operator=(const vector &vec); //重载等号操作符。

  1. assign(beg,end); //将[beg,end)区间中的数据拷贝赋值给本身。

  1. assign(n,elem); //将n个elem拷贝赋值给本身。

③ vector赋值方式比较简单,使用operator=,或者assign都可以。

运行结果:

  • 0123456789

  • 0123456789

  • 0123456789

  • 100100100100100100100100100100

  • 请按任意键继续. . .

3.4 容量和大小

① 功能描述:对vector容器的容量和大小操作。

② 函数原型:

//判断容器是否为空

  1. empy();

//容器的容量

  1. capacity();

//返回容器中元素的个数

  1. size();

//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。

//如果容器变短,则末尾超出容器长度的元素被删除。

  1. resize(int num);

//重新指定容器的长度为num,若容器变成,则以elem值填充新位置。

//如果容器变短,则末尾超出容器长度的元素被删除。

  1. resize(int num, elem);

③ vector 容器的容量(用 capacity 表示),指的是在不分配更多内存的情况下,容器可以保存的最多元素个数;而 vector 容器的大小(用 size 表示),指的是它实际所包含的元素个数。

④ vector 容器的大小不能超出它的容量,在大小等于容量的基础上,只要增加一个元素,就必须分配更多的内存。注意,这里的“更多”并不是 1 个。换句话说,当 vector 容器的大小和容量相等时,如果再向其添加(或者插入)一个元素,vector 往往会申请多个存储空间,而不仅仅只申请 1 个。

⑤ 一旦 vector 容器的内存被重新分配,则和 vector 容器中元素相关的所有引用、指针以及迭代器,都可能会失效,最稳妥的方法就是重新生成。

运行结果:

  • 0123456789

  • v1不为空:

  • capacity容量:13

  • v1的大小为:10

  • 012345678900000

  • 012345678900000100100100100100

  • 01234

  • 请按任意键继续. . .

3.5 插入删除

① 功能描述:对vector容器进行插入、删除操作。

② 函数原型:

  1. push_back(ele); //尾部插入元素ele

  1. pop__back(); //删除最后一个元素

  1. insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele

  1. insert(const_iterator pos, int count ele); //迭代器指向位置pos插入count个元素

  1. erase(const_iterator pos); //删除迭代器指向的元素

  1. erase(cons_titerator start, const_iterator end); //删除迭代器从start到end之间的元素

  1. clear(); //删除容器中所有元素

运行结果:

  • 10 20 30 40 50

  • 10 20 30 40

  • 100 10 20 30 40

  • 999 999 100 10 20 30 40

  • 999 100 10 20 30 40

  • 请按任意键继续. . .

3.6 数据存取

① 功能描述:对vector中的数据存取操作。

② 函数原型:

  1. at(int idx); ///返回索引idx所指的数据。

  1. operator[]; //返回索引idx所指的数据。

  1. front(); //返回容器中第一个数据元素

  1. back(); //返回容器中最后一个数据元素

③ 除了用迭代器获取vector容器中元素,[]和at也可以。

④ front返回容器第一个元素。

⑤ back返回容器最后一个元素。

运行结果:

  • 0 1 2 3 4 5 6 7 8 9

  • 0 1 2 3 4 5 6 7 8 9

  • 第一个元素为:0

  • 最后一个元素为:9

  • 请按任意键继续. . .

3.7 互换容器

① 功能描述:实现两个容器内元素进行互换。

② 函数原型:swao(vec); //将vec与本身的元素互换

③ swap可以使两个容器互换,可以达到实用的收缩内存效果。

运行结果:

  • 交换前:

  • 0 1 2 3 4 5 6 7 8 9

  • 10 9 8 7 6 5 4 3 2 1

  • 交换后:

  • 10 9 8 7 6 5 4 3 2 1

  • 0 1 2 3 4 5 6 7 8 9

  • v的容量为:138255

  • v的大小为:100000

  • v的容量为:138255

  • v的大小为:3

  • v的容量为:3

  • v的大小为:3

  • 请按任意键继续. . .

3.8 预留空间

① 功能描述:减少vector在动态扩展容量时的扩展次数。

② 函数原型:

  1. reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。

运行结果:

  • num:30

  • num:1

  • 请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值