c++vector

1 C++ Vector(向量容器)
是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩
展。它可以像数组一样被操作,由于它的特性我们完全可以将vector  看作动态数
组。
在创建一个vector  后,它会自动在内存中分配一块连续的内存空间进行数据
3
存储,初始的空间大小可以预先指定也可以由vector  默认指定,这个大小即
capacity  ()函数的返回值。当存储的数据超过分配的空间时vector  会重新分配
一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作: 
首先,vector  会申请一块更大的内存块;
然后,将原来的数据拷贝到新的内存块中;
其次,销毁掉原内存块中的对象(调用对象的析构函数);
最后,将原来的内存空间释放掉。
如果vector  保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也
是vector  被设计成比较容易拷贝的值类型的原因)。所以说vector  不是在什么情
况下性能都好,只有在预先知道它大小的情况下vector  的性能才是最优的。
vector  的特点:
(1)  指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组
一样操作,并且可以进行动态操作。通常体现在push_back() pop_back()  。
(2)  随机访问方便,它像数组一样被访问,即支持[ ]  操作符和vector.at()
(3)  节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是
要明确一点vector  大多情况下并不是满存的,在未存储的区域实际是浪费的。
(4)  在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。
Vector  被设计成只能在后端进行追加和删除操作,其原因是vector  内部的实现
是按照顺序表的原理。
(5)  只能在vector  的最后进行push  和pop  ,不能在vector  的头进行push  和pop  。
(6)  当动态添加的数据超过vector  默认分配的大小时要进行内存的重新分配、拷
贝与释放,这个操作非常消耗性能。  所以要vector  达到最优的性能,最好在创
建vector  时就指定其空间大小。
Vectors  包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的
任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的
元素所处的位置或是在Vector中插入元素则是线性时间复杂度。
1.Constructors  构造函数
vector<int> v1; //构造一个空的vector
vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector
2.Operators  对vector进行赋值或比较
C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <,  和  >.
要访问vector中的某特定位置的元素可以使用  []  操作符.
两个vectors被认为是相等的,如果:
1.它们具有相同的容量
2.所有相同位置的元素相等.
vectors之间大小的比较是按照词典规则.
3.assign()  对Vector中的元素赋值
语法:
void assign( input_iterator start, input_iterator end );
//  将区间[start, end)的元素赋到当前vector
void assign( size_type num, const TYPE &val );
//  赋num个值为val的元素到vector中,这个函数将会清除掉为vector赋值以前的内容.  
4
4.at()  返回指定位置的元素
语法:
TYPE at( size_type loc );//差不多等同v[i];但比v[i]安全;
5.back()  返回最末一个元素
6.begin()  返回第一个元素的迭代器
7.capacity()  返回vector所能容纳的元素数量(在不重新分配内存的情况下)
8.clear()  清空所有元素
9.empty()  判断Vector是否为空(返回true时为空)
10.end()  返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
11.erase()  删除指定元素
语法:
iterator erase( iterator loc );//删除loc处的元素
iterator erase( iterator start, iterator end );//删除start和end之间的元素
12.front()  返回第一个元素的引用
13.get_allocator()  返回vector的内存分配器
14.insert()  插入元素到Vector中
语法:
iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val );
//在指定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end );
//在指定位置loc前插入区间[start, end)的所有元素
15.max_size()  返回Vector所能容纳元素的最大数量(上限)
16.pop_back()  移除最后一个元素
17.push_back()  在Vector最后添加一个元素
18.rbegin()  返回Vector尾部的逆迭代器
19.rend()  返回Vector起始的逆迭代器
20.reserve()  设置Vector最小的元素容纳数量
//为当前vector预留至少共容纳size个元素的空间
21.resize()  改变Vector元素数量的大小
语法:
void resize( size_type size, TYPE val );
//改变当前vector的大小为size,且对新创建的元素赋值val
22.size()  返回Vector元素数量的大小
23.swap()  交换两个Vector
语法:
void swap( vector &from );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙在江湖aa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值