C++ vector用法

vector 

一维

vector<int> a; 等同于声明了一个数组int a[ ],大小没有指定,可以实现动态的添加删除。 

二维

vector <int *> a
int b = 5;
a.push_back(b);    //该函数下面有详解
cout<<a[0];        //输出结果为5

 函数

#include<iosteam>
#include<vector>
using namespace std;

int main(){
    vector<int> v;
    for(int i = 1; i <= 1000; ++i) 
        v.push_back(i);
}
1.  push_back   在数组的最后添加一个数据
2.  pop_back    去掉数组的最后一个数据 
3.  at          得到编号位置的数据
4.  begin       得到数组头的指针
5.  end         得到数组的最后一个单元+1的指针
6. front       得到数组头的引用
7.  back        得到数组的最后一个单元的引用
8.  max_size    得到vector最大可以是多大
9.  capacity    当前vector分配的大小
10. size        当前使用数据的大小
11. resize      改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12. reserve     改变当前vecotr所分配空间的大小
13. erase       删除指针指向的数据项
14. clear       清空当前的vector
15. rbegin      将vector反转后的开始指针返回(其实就是原来的end-1)
16. rend        将vector反转构的结束指针返回(其实就是原来的begin-1)
17. empty       判断vector是否为空
18. swap        与另一个vector交换数据
 vector<int> c

 c.clear()           移除容器中所有数据。
 c.empty()           判断容器是否为空。
 c.erase(pos)        删除pos位置的数据
 c.erase(beg,end)    删除[beg,end)区间的数据
 c.front()           传回第一个数据。
 c.insert(pos,elem)  在pos位置插入一个elem拷贝
 c.pop_back()        删除最后一个数据。
 c.push_back(elem)   在尾部加入一个数据。
 c.resize(num)       重新设置该容器的大小
 c.size()            回容器中实际数据的个数。
 c.begin()           返回指向容器第一个元素的迭代器
 c.end()             返回指向容器最后一个元素的迭代器

内存管理、效率

关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)

对于vector和string,如果需要更多空间,就以类似realloc的思想来增长大小。vector容器支持随机访问,因此为了提高效率,它内部使用动态数组的方式实现的。在通过 reserve() 来申请特定大小的时候总是按指数边界来增大其内部缓冲区。

当进行insert或push_back等增加元素的操作时,如果此时动态数组的内存不够用,就要动态的重新分配当前大小的1.5~2倍的新内存区,再把原数组的内容复制过去。所以,在一般情况下,其访问速度同一般数组,只有在重新分配发生时,其性能才会下降。正如上面的代码告诉你的那样。而进行pop_back操作时,capacity并不会因为vector容器里的元素减少而有所下降,还会维持操作之前的大小。对于vector容器来说,如果有大量的数据需要进行push_back,应当使用reserve()函数提前设定其容量大小,否则会出现许多次容量扩充操作,导致效率低下。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值