STL中vector小结

(1)使用vector之前必须包含头文件<vector>:#include<vector>

(2)namespace std{
     template <class T,
               class Allocator = allocator<T> >
     class vector;
    }
vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质。第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator。

(3)在末端附加或删除元素时,vector的性能相当好。可是如果你在前端或中部安插或删除元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动到另一个位置,而每一次移动都得调用assignment操作符

(4)vector性能优异的秘籍之一就是配置比其所容纳的元素所需更多的内存。当vector申请的内存被用尽时,vector会重新申请一片新的内存,通常新申请的内存会是原来内存的两倍.一旦内存重新配置,和vector元素相关的所有references,pointers,iterators都会失效

(5)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迭代器持续有效,除非发生两种情况:(1)使用者在一个较小的索引位置上安插或移除元素(2)由于容量的变化而引起内存的重新分配

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()      将容器清空

  

时间: 2024-10-14 13:52:39

STL中vector小结的相关文章

C++的STL中vector内存分配方法的简单探索

STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio.h> using namespace std; int main() { vector<int> x_vec; printf("data size : [%3d], mem size : [%3d]\n", x_vec.size(), x_vec.capacity())

STL中vector的初始化

vector可用于代替C++中的数组,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性.而且vector是STL推荐使用的默认容器,STL中向量是使用数组实现的,因此向量具有顺序表的特点,可以快速随机存取数据.向量是一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组. 使用向量之前,必须包含相应的头文件: #include<vector> using std::vector 同时也应当注意,vector是一个模板类,而非数据类型.所以在

C++/STL中 vector中对 “=”赋值运算符的支持

由于好奇STL中的vector 对于自定义数据类型的 " = "(赋值运算符的)支持,谢了一段简单的测试代码进行测试. 结果证明vector对于赋值预算符支持良好,但是对于动态分配的类构成的vector数组, 博主认为一定要重写析构函数与复制构造函数以及运算符重载"="运算符(这是一条软件规则,详见博主测试),链接如下: http://blog.csdn.net/u010003835/article/details/47314811 测试代码: #include &

C++ STL中vector(向量容器)使用简单介绍

原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存. 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即cap

STL中 vector 和 list 一些特性

STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式.即在索引可以在常数时间内完成.缺点是在插入或者删除一项时,需要线性时间.但是在尾部插入或者删除,是常数时间的. STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的.索引则需要线性时间(和单链表一样). 以下是vector和list中常用的方法: int size() const  ;  返回容器内所有元素的个数. void  clear()  ;    删除容器中所有元素.

[转]STL中vector转数组(实际是数组的指针)

感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.html 不过那边是转载自<effective stl>. std::vector很方便,但有时调用的函数的参数规定是数组,需要将vector转为数组,另外开辟一个空间,将vector一项项复制过去代价过大,可用下面的方法. 给定一个 vector<int>   v;         表达

C/C++知识要点2——STL中Vector、Map、Set容器的实现原理

1.Vector是顺序容器,是一个动态数组,支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自动分配空间,增加为原来的两倍.vector随机存取效率高,但是在vector插入元素,需要移动的数目多,效率低下. 注意:vector动态增加大小时,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间.因此,对vector的任何操作,一

STL中vector的用法

vector应该是STL种最常用的容器了,可以当做数组来看待,只不过vector的元素更丰富,不仅仅是数据元素,还可以是结构体 1.vector的创建和初始化 vector <double> v;//创建一个double类型的vector vector <int> v2(5);//创建一个含有5个元素的int型vector,初始值默认为0 vector <int> v3(4,7);//创建一个含有4个元素的int型vector,初始值都为7 当然也可以通过在尾部添加元素

STL中vector,Map,Set的实现原理

vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统.但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块头的array了,我们可以安心使用vector,随便使用多