C++语言的一大精髓就是STL,这篇blog会介绍什么是STL以及STL的简单应用。
一、什么是STL?
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从一般来说上讲分为三类:algorithm(算法库)、container(容器库)和iterator(迭代器),几乎所有的代码都采用了模板元编程的方式,这相比于传统的由函数和类组成的库来说提供了代码复用的机会。
接下来我会为大家介绍std::vector来入门STL。
二、std::vector(向量):
std::vector是一类十分常用的容器,如果你能数组做到的操作,那么你都能用vector完成。下面来介绍vector的操作。
如果你想要使用vector,必须先在预处理指令中#include<vector>。
1.声明一个vector:
vector<data_type> vec_name;
下面来解释一下这个声明的意义,可以帮助大家直观的认识什么是模板。
首先vector指明了这个模板是vector,其实还有很多其他的模板,这里先不介绍了。
然后<>是模板指明类型的地方,这里面你可以写你需要的模板类型,然后vec_name就是模板名了。
所以模板实际上就是一个壳子,然后<>里面就是你想在这个壳子里面装的东西。
2.向里面装元素:
vector是一个动态的数组,什么叫动态的数组呢?意思就是vector其实可以动态的增加它的大小并且动态的向里面装入元素。
vector自身有一个成员函数push_back(),其作用就是向容器的尾部加入一个元素,这是什么意思呢?
加入我们现在有一个vector<int> v;并且里面的元素为[1,3,5,2,9]。那么v.push_back(10)就能够向容器的尾部加入一个10,现在容器里面的元素变成了[1,3,5,2,9,10]。
另外容器还有一个成员函数size(),我们可以通过size()函数获得现在容器里面有多少个元素。我们通过v.size()调用这个函数。顺便说一下,一个类是通过.(点)运算符来获得其中的成员变量或者成员函数。
那么下面展示一下如何使用这两个函数:
3.vector的大小:
既然vector能够支持数组的所有操作,那么显然我们也能为vector指定大小并且按照数组一样访问。vector能够在声明的时候直接指定大小,具体做法就是在声明的时候,在vector名后面加上一个括号,然后在里面指定大小。
除此之外还能通过resize()函数直接改变容器的大小。具体做法是v.resize(new_size);
还有一个函数是reserve(),这个函数不直接改变vector的size,而是增大vector的预留空间,这与vector的扩张策略有关。
4.迭代器:
迭代器iterator是模板库一个独特的设计,通过iterator独特的设计从而隐藏iterator内部的实现细节,而使用者只需要知道iterator怎么用而不去关心iterator是个什么东西。
vector通过begin()和end()函数获得vector的首位元素的迭代器,end()则是获得最后一个位置并且往后再退一位的迭代器。end()返回的迭代器并没有实际的元素,实际上这是一个标记,意味着整个位置没有任何的元素,因此是不能访问的。由于我忘记讲指针的一些骚操作,这里先欠着。
5.清空vector:
如果想要清空一个vector,只需要调用成员函数clear()就行了。这个清空并不是把vector里面的元素变成0,而是把整个vector的空间都清空。
6.判断vector是否为空:
只需要调用vector的empty()函数是否为空就行了,其实可以直接判断vector的size是否为0,但是其实size()函数的效率小于empty(),所以想要判断是否为空用empty()函数比较好。
感觉又没讲多少,这东西更多的还是靠自己,大家平时应该多认真看看书,然后多提问更好。