1.标准模板库
模板是C++程序设计语言的一个比较新的重要特征,而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。事实上,C++的模版,本身即是一套复杂的宏语言(macro language),宏语言最大的特色为:所有工作在编译时期就已完成。
这里以vector(向量)为例。C++提供了内建阵列的替代型态vector,vector 可以如同阵列一样的存取方式,例如使用下标(Subscript)运算子,并记得自己的长度资讯(size),您也可以使用物件的方式来存取vector(push、pop)。使用vector可以轻易地定义二维可调整型阵列。要使用vector,必须含入vector表头档。
(1) 声明向量前,必须引入其头文件
#include <vector>
using namespace std;
(2) 向量的声明方法:vector<向量里存储的元素类型> 向量名
vector<string> inventory;
vector<string> inventory(10); //初始大小为10的向量
vector<string> inventory(10,"nothing"); //初始大小为10,10个元素全都初始化为"nothing"
vector<string> inventory(myStuff); //创建一个新向量,其内容与myStuff相同
(3)向量中元素的插入:向量名.push_back(要插入的元素);
push_back()成员函数在向量的最后添加一个新的元素。
(4)返回向量中元素的个数:向量名.size();
(5)向量的索引:向量名[索引下标];(如数组一样)
(6)移除最后的成员:向量名.pop_back();
pop_back()成员函数移除向量的最后一个元素并将其大小减1
(7)移除向量所有元素:向量名.clear();
(8)检查向量是否为空:向量名.empty();若为空返回true否则返回false。
(9)插入向量:向量名.insert();添加至序列的任意位置。例如:
inventory.insert(inventory.begin(),"oldstring"); //inventory.begein()以下有介绍
以上语句是将"oldstring"插入在序列开头,原有的插入点之后的元素全部后移一个位置。返回值是新插入的元素的迭代器。实际上函数的第一个参数是迭代器类型。关于迭代器下面有介绍。
(10)移除任意成员:向量名.erase();可以移除位于中间的成员。例如:
迭代器:迭代器是将容器的潜力发挥到极致的关键。迭代器可以用于循环访问序列容器。迭代器的具体用法如下:
inventory.erase((inventory.begin() + 2));
以上语句移除了向量中的第三个元素。随后的元素都上移一位,返回值是移除的元素之后的那个元素。
(1)声明迭代器
有两种迭代器,声明方法如下(以string容器为例):
vector<string>::iterator myIterator; //常规迭代器
vector<string>::const_iterator iter; //常量迭代器
迭代器是标识容器中某个特定元素的值。常规迭代器可以修改其值,而常量迭代器只能读出特定元素的值,不能修改。
(2)循环访问向量
向量有两个成员变量函数:begin()和end(),前者返回容器中的第一个元素的地址;后者返回容器中的最后一个元素
之后的一个地址。实际上,迭代器中存储的就是向量中元素的地址,通过对迭代器进行自加,就能够得到下一个元素的地址。因此可以通过以下代码实现循环访问向量:
for (iter = inventory.begin(); iter != inventory.end(); ++iter)
{
......
}
(3)修改向量元素的值
由于迭代器可以看成是标记向量元素的地址,那么要取得该向量的值,只需要像解引用地址那样在迭代器名前加一个*。如果是常规迭代器,还可以对向量元素的值进行解引用。例如:
*myIterator = "newstring";
cout << (*myIterator).size();
(4)从向量中查找一个值:find(向量查找范围的下限,向量查找范围的上限,要查找的值);例如:
iter = find(inventory.begin();inventory.end();"newstring");
(5)对向量进行乱序:rand_shuffle(向量乱序范围的下限,向量乱序范围的上限);例如:
//srand(static_case<unsigned int>(time(0)));//用系统时间做随机数的种子,要自动转型成整型
random_shuffle(inventory.begin();inventory.end());
(6)对向量进行排序:sort(向量排序范围的下限,向量排序范围的上限);例如:
sort(inventory.begin();inventory.end());
另外,vector还有两个与动态增长有关的成员函数,capacity()和reserve()。前者返回向量的容量,即在程序必须为其重新分配更多的内存前,向量所能容纳的元素数目。它与向量的大小不是同一概念。向量的大小是指已经用的内存数,向量的容量是指分配了的内存数。如果分配给向量的内存全部用了还不够,就需要reserve()函数将向量的容量扩充额外的容量。例如:
if(inventory.capacity() - inventory.size() < 10)
{
inventory.reserve(inventory.capacity() + 100);
}
分享到:
相关推荐
《C++标准模板库编程实战》介绍最新的C++14标准的API、库和扩展,以及如何将它们运用到C++14程序中。在书中,作者Ivor Horton 则阐述了什么是STL,以及如何将它们应用到程序中。我们将学习如何使用容器、迭代器,...
一个比较好的C++的标准模板库.主要包含C++的标准模板库中的容器和算法的类库。主要包含STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。
c++ 标准 模板库 与谭浩强决然不同的阐述
C++_标准模板库(STL)是通用类模板和算法的集合。
本书详细介绍了C++中的标准模板库,利用标准模板库,你可以直接定义一些东西,然后直接调用模板库里面的东西。比如栈、链表、数组、队列等等。
C++_标准模板库(STL) pdf 高清版 C++ 标准模板库(STL)
c++标准模板库,一些标准库的详细用法。还有一些实例,有助于提高C++编程能力
数据结构:使用C++标准模板库(STL)陈本林 傅健康编著
本文档包含对C++标准模板库相关内容的资料以及介绍
《数据结构:使用C++标准模板库(STL)》 陈本林 傅健康 编著
本书是Ford和Topp两位教授于1996年出版的名著Data Structures with C++的第2版,新版中引入了在ANSI C 1998中正式规定的标准模板库(STL)来讲授数据结构,在全球范围内已经有数以万计的学生从中受益。 作者将C++...
讲义
C++标准模板库(STL)手册
C++语言STL标准模板库 中文教程.zip
C++标准模板库源代码
C++标准模板库编程实战-书中所用代码C++标准模板库编程实战-书中所用代码
c++入门资料
详细介绍C++标准,对于构建高效C++ 程序是值得一看的好资源
畅销书作者、编程导师Ivor Horton经典巨作、畅销经典 经久不衰 全面升级至C++14,对《C++入门经典(第4版)》充分补充,从入门到精通C++,以*丰富翔实的经典习题案例深度解读C++。
C++ 的标准模板库(Standard Template Library,STL)是泛型程序设计最成功应用的实例。 STL 是一些常用数据结构(如链表、可变长数组、排序二叉树)和算法(如排序、查找)的模板的结合,主要由 Alex Stepanov ...