[C++标准模板库:自修教程与参考手册]关于vector
来源:互联网 发布:股票统计软件手机 编辑:程序博客网 时间:2024/05/22 10:58
什么是vector
可以这样认为,vector就是一个动态的数组,其中的元素必须具备assignable(可赋值)和copyable(可拷贝)两个性质。
vector的一些重要的性质
- vector支持随机存取,存取时间为O(1)。
- vector的迭代器是随机存取迭代器,所以所有的STL算法都可以使用。
- 在末尾添加元素时,vector的性能非常好(只要总的元素个数没超过capacity就行)。但是如果在中间或者前面插入元素,那么性能就不是那么好了,此元素的后面全部元素都要后移,即每一次移动都要执行assign赋值操作。
- 两个vector交换内容后,它们的容量也会交换。
- vector的第一个元素的索引为0,最后一个元素的索引为size()-1。
- 一个vector vec,它的一些操作:vec[x],vec.front(),vec.back()三个操作都不会检查元素是否存在,所以要我们自己进行判断该位置的元素存在与否。
vector的内存分配
vector的size表示当前拥有元素的个数,capacity表示vector最多能拥有多少个元素。如果size的大小超过了capacity,那么vector就会重新调用内存分配器分配新的内存。
vector的容量之所以有很大的重要性,是因为两个原因:
- 一旦内存重新分配,那么这个vetor的迭代器,引用,指针全都会失效。
- 内存重新分配非常耗费时间。
当然,也可以使用reserve()函数来保存适当的容量,避免不必要的内存配置:
std::vector<int> v;//提前分配好100的容量v.reserve(100);
当然,如果reserve()的参数中的数值比当前的capacity要小的话,那么不会有任何反应。
vector一些常用函数
std::vector<int> c;//返回idx位置所在的元素,如果月结,就会跑出out_of_range异常c.at(idx);//返回索引idx所在的元素,不进行范围检查c[idx];//返回第一个元素。不检查第一个元素是否存在c.front();//返回最后一个元素,不检查最后一个元素是否存在c.back();//返回一个随机存取迭代器,指向第一个元素c.begin();//返回一个随机存取迭代器,指向最后一个元素c.end();//返回一个逆向迭代器,指向逆向迭代的第一元素c.rbegin();//返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置c.rend();//在pos位置上插入一个elem副本,并返回新元素的位置c.insert(pos,elem);//在pos位置上插入n个elem副本,无返回值。c.insert(pos,n,elem);//在pos位置上插入区间[beg:end]内所有元素的副本,无返回值c.insert(pos,beg,end);//在尾部添加一个elem副本c.push_back();//移除最后一个元素,但是不传回c.pop_back();//移除pos位置上的元素,返回下一个元素的位置c.erase(pos);//移除[beg,end]区间内的所有元素,返回下一元素的位置c.erase(beg,end);//将元素数量改为num,如果size()变大了,多出来的新元素都用默认构造函数完成c.resize(num);//将元素熟练改为num,如果size()变大了,多出来的新元素都是elem的副本c.resize(num,elem);//移除所有的元素,将容器清空c.clear();
阅读全文
0 0
- [C++标准模板库:自修教程与参考手册]关于vector
- [C++标准模板库:自修教程与参考手册]关于auto_ptr
- [C++标准模板库:自修教程与参考手册]关于deque
- C++:标准模板库vector
- 标准模板库STL中vector使用参考手册
- C++标准库—自学教程与参考手册(第2版)之第一章 关于这本书
- 【C++】 C++标准模板库(一) Vector
- 标准模板库STL中Stack参考手册
- 标准模板库STL中Queue参考手册
- STL标准模板库vector
- 第五章数组与C++标准库类模板vector
- C++标准库—自学教程与参考手册(第2版)翻译前言
- C++,标准库类型vector
- 标准模板库map, vector查找用法
- 标准模板库vector的总结
- 标准模板库 vector源码学习
- 标准模板库(STL)使用---vector
- 标准模板库STL详解之vector
- mysql判断空与0(持续更新中)
- Python 列表list
- 1038. Recover the Smallest Number (30)
- MarkdownPad2的注册码
- Mysql数据库2003解决
- [C++标准模板库:自修教程与参考手册]关于vector
- Leetcode OJ 98 Validate Binary Search Tree [Medium]
- Linux搭建IPSec/IKEv2 VPN服务器及客户端连接教程
- Ubuntu中创建Intellij IDEA快捷方式
- 第一章 创建爬虫常用命令
- 周记--听平凡人说故事
- 栈(LIFO:后进先出)
- 【Linux】【Docker】Ubuntu14.04 安装 Docker CE
- 数据库的存储过程详解