STL中vector小结
()使用vector之前必须包含头文件<vector>:#include<vector>
()namespace std{
template <class T,
class Allocator = allocator<T> >
class vector;
}
vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质。第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator。
()在末端附加或删除元素时,vector的性能相当好。可是如果你在前端或中部安插或删除元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动到另一个位置,而每一次移动都得调用assignment操作符
()vector性能优异的秘籍之一就是配置比其所容纳的元素所需更多的内存。当vector申请的内存被用尽时,vector会重新申请一片新的内存,通常新申请的内存会是原来内存的两倍.一旦内存重新配置,和vector元素相关的所有references,pointers,iterators都会失效
()vector的各项操作:
vector<Elem> c 产生一个空vector
vector<Elem> c1(c2) 产生另一个同型vector的副本
vector<Elem> c(n) 利用元素的default构造函数生成一个大小为n的vector
vector<Elem> c(n, elem) 产生一个大小为n的vector,每个元素值都是elem
vector<Elem> c(beg, end) 产生一个vector,以区间[beg, end)作为元素初值
c.~vector<Elem>() 销毁所有元素并释放内存
c.size() 返回当前的元素数量
c.empty() 判断vector是否为空
c.max_size() 返回可容纳的元素最大数值
c.capacity() 返回重新分配空间前所能容纳的元素最大数量
c.reserve() 如果容量不足,扩大之
c1 compare c2 compare可为==,!=,<,>,<=和>=
c1 = c2 将c2全部元素赋值给c1
c.assign(n, elem) 复制n个elem,赋值给c
c.assign(beg, end) 将区间[beg, end)内的元素赋值给c
c1.swap(c2) 将c1和c2元素互换
c.at(idx) 返回索引idx所标示的元素,如果idx越界则抛出out_of_range异常
c[idx] 返回索引idx所标示的元素,不进行范围检查
c.front() 返回第一个元素,不检查元素是否存在
c.back() 返回最后一个元素,不检查元素是否存在
c.begin() 返回一个随机存取迭代器,指向第一个元素
c.end() 返回一个随机存取迭代器,指向最后元素的下一个位置
c.rbegin() 返回一个逆向迭代器,指向逆向迭代的第一个元素
c.rend() 返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置
vector迭代器持续有效,除非发生两种情况:()使用者在一个较小的索引位置上安插或移除元素()由于容量的变化而引起内存的重新分配
c.insert(it, elem) 在it位置上插入一个elem副本并返回新元素的位置
c.insert(it, n, elem) 在it位置上插入n个elem副本,无返回值
c.insert(it, beg, end) 在it位置上插入区间[beg, end)内的所有元素副本,无返回值
c.push_back(elem) 在尾部添加一个elem副本
c.pop_back() 移除最后一个元素(但不回传)
c.erase(it) 移除it位置上的元素,返回下一个元素的位置
c.erase(beg, end) 移除[beg, end)区间内的所有元素,返回下一个元素的位置
c.resize(num) 将元素数量改为num(如果size()变大了,多出来的新元素都需以default构造函数构造完成)
c.resize(num, elem) 将元素数量改为num(如果size()变大了,多出来的新元素都是elem的副本)
c.clear() 将容器清空
STL中vector小结的更多相关文章
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- C++ STL中vector(向量容器)使用简单介绍
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...
- STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0 这个程序使用了vect ...
- STL中 vector 和 list 一些特性
STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式.即在索引可以在常数时间内完成.缺点是在插入或者删除一项时,需要线性时间.但是在尾部插入或者删除,是常数时间的. ...
- [转]STL中vector转数组(实际是数组的指针)
感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...
- STL中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: namesp ...
- C/C++知识要点2——STL中Vector、Map、Set容器的实现原理
1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...
随机推荐
- java封装性
原先是class Person{ public string name; public int age } public void main{ Person person=new person(); ...
- Maven学习总结(五)——聚合与继承
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...
- Django网站管理、后台、模型(Admin)
1. 启动wampserver 2. 新建一个名为mysite的项目django-admin.py startproject mysite 3. 新建一个叫做blog的appcd mysitepyth ...
- Nginx缓存、压缩配置
1.缓存配置 只需在http的server模块里配置即可,如: location ~.*\.(jpg|png|gif)$ { expires 30d; } location ~.*\.(css|js) ...
- C# 动态修改dll的签名 以及修改引用该dll文件的签名
在读取RedisSessionStateProvider配置 提到用mono ceil 来修改程序集以及它的签名,里面GetPublicKey 和GetPubliKeyToken 方法里面那个字符串的 ...
- 用Canvas写一个炫酷的时间更新动画玩玩
正文必须要写点什么... // '; var WINDOW_WIDTH = 913; var WINDOW_HEIGHT = 400; var RADIUS = 7; //球半径 var NUMB ...
- win7下安装ubuntu13.04
http://teliute.org/linux/Ubsetup/jichu1/jichu1.html xp下安装 http://flysqrlboy.blog.51cto.com/5027074/8 ...
- [转载]BW增量更新的理解(时间戳)
在BW中,存在两种数据抽取方式,完全更新与增量更新,完全更新是每次把截至到某个时间的数据全部抽取,增量抽取则只抽取上次和本次抽取之间更新的数据,很显然,增量抽取能够提高系统效率,根据SAP帮 助的说法 ...
- 转:NO.523 Aidan Hawken&Carina Round - Walking Blind
NO.523 Aidan Hawken&Carina Round - Walking Blind 好像是好几天没来更新过 也没有找歌 因为这几天一直在追美剧 吸血鬼日记 好不容易 今天追到了第 ...
- Python: 如何继承str/string?
想搞一个对象继承自str,然后存一些额外信息用来标识这个字符串,然后理所当然地重写了__init__发现跪了: class newstring(str): def __init__(self, val ...