C++ STL容器的使用
C++的STL(Standard Template Library)全称——标准模板库。是C++中很重要的一部分,也是其明显有别与C语言本身的地方。其很好的体现了C++的面向对象的特点——抽象与封装,即数据与方法的剥离。
可以说C++若没有了STL则如同缺失了左膀右臂。程序 = 数据结构 + 算法,这个算法极其不严格但仍被广为接受。可以说数据结构和算法是一个程序软件的肉体与灵魂,其他则都是身外之物了。
而STL正是对C语言原生的基本数据类型的一次大扩充,使其更容易完成从数据结构的抽象到具体实现。虽然C语言依靠本身的基本数据类型能够实现基本所有的功能,但是人总归不愿重复的造轮子。而STL就是C++中提供的通用的轮子模板。
STL主要由三部分组成,算法、容器和迭代器。其被分散组织在13个头文件中。使用STL可以实现通用的数据结构,而且由于算法和容器的充分剥离。不需要对每个新实现的数据结构的实体来重载对应的运算符和算法。而为了实现这种剥离,总归是要
有妥协和牺牲的。因此STL中存在了迭代器的概念,其相当于算法与容器的粘合剂。要用到粘合剂的地方总是有裂缝存在,而这个裂缝正是为了隔离算法与容器而产生的。为了弥补这个“裂缝”,“粘合剂”要提供一种统一的容器遍历方式来给算法。
<vector>
直译为向量,其实这个名称和有迷惑性。因为数学上的向量是指一个既有大小又有方向的值,而作为容器来说并没有也不需要这样的抽象概念来作为基本的数据结构。因此反倒是翻译为数组更合适。
其与基本数据类型的数组,例如int a[10],其区别在于vector是一个可以容纳任意类型(包括结构体和类)数据的动态数组。其功能更强大,其特点在于:
1.这个容器可以容纳结构体或类等自定义的数据类型。
2.其数组大小可以动态改变。
3.vector和其他容器,例如list相比,可以使用下标进行随机访问。读取数据的时间复杂度为O(1), 插入和删除的时间复杂度为O(n)。其与deque区别在于其单向开口,向容器尾部插入数据
定义与初始化:
vector<T> test();
vector<T> test((int)iSize);
vector<T> test((int)iSize, (T)tValue);
vector<T> test((T)copy);
vector<T> test((T)copy.begin(), (T)copy.end());
/*T为vector容器中变量的数据类型*/
插入与删除:
void push_back(const T& t); //向vector的尾部插入一个新元素
void pop_back(); //删除vector尾部的元素
void insert(iterator it, const T& t); //在迭代器it之前插入数据元素t
void insert(iterator it, int n, const T& t); //在迭代器it之前插入n个数据元素t
void insert(iterator it, const_iterator start, const_iterator emd); //在迭代器it之前插入vector变量的【start,end】区间中的元素
void clear(); //清空vector中的元素,并将其size置为0,但是其capacity还是保持原样
iterator erase(iterator it); //删除it指向的元素,并释放vector的内存,将capacity减小1
iterator erase(iterator start, iterator end) //删除【start,end】区间的元素,并释放其内存,将capacity适量减小
遍历:

浙公网安备 33010602011771号