如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
STL简介一些基础概念的定义模板(Template)——类(以及结构等各种数据类型和函数)的宏(macro)。有时叫做甜饼切割机(cookiecutter),正规的名称应叫做范型(generic)——一个类的模板叫做范型类(genericclass),而一个函数的模板也自然而然地被叫做范型函数(genericfunction)。STL——标准模板库,一些聪明人写的一些模板,现在已成为每个人所使用的标准C++语言中的一部分。容器(Container)——可容纳一些数据的模板类。STL中有vector,set,map,multimap和deque等容器。向量(Vector)——基本数组模板,这是一个容器。游标(Iterator)——这是一个奇特的东西,它是一个指针,用来指向STL容器中的元素,也可以指向其它的元素。HelloWorld程序//程序:vector演示一//目的:理解STL中的向量//#include"stdafx.h"-如果你使用预编译的头文件就包含这个头文件#include<vector>//STL向量的头文件。这里没有".h"。#include<iostream>//包含cout对象的头文件。usingnamespacestd;//保证在程序中可以使用std命名空间中的成员。char*szHW="HelloWorld";//这是一个字符数组,以”\0”结束。intmain(intargc,char*argv[]){vector<char>vec;//声明一个字符向量vector(STL中的数组)//为字符数组定义一个游标iterator。vector<char>::iteratorvi;//初始化字符向量,对整个字符串进行循环,//用来把数据填放到字符向量中,直到遇到”\0”时结束。char*cptr=szHW;//将一个指针指向“HelloWorld”字符串while(*cptr!='\0'){vec.push_back(*cptr);cptr++;}//push_back函数将数据放在向量的尾部。//将向量中的字符一个个地显示在控制台for(vi=vec.begin();vi!=vec.end();vi++)//这是STL循环的规范化的开始——通常是"!=",而不是"<"//因为"<"在一些容器中没有定义。//begin()返回向量起始元素的游标(iterator),end()返回向量末尾元素的游标(iterator)。{cout<<*vi;}//使用运算符“*”将数据从游标指针中提取出来。cout<<endl;//换行return0;}push_back是将数据放入vector(向量)或deque(双端队列)的标准函数。Insert是一个与之类似的函数,然而它在所有容器中都可以使用,但是用法更加复杂。end()实际上是取末尾加一(取容器中末尾的后一个元素),以便让循环正确运行——它返回的指针指向最靠近数组界限的数据。就像普通循环中的数组,比如for(i=0;i<6;i++){ar[i]=i;}——ar[6]是不存在的,在循环中不会达到这个元素,所以在循环中不会出现问题。初始化STL令人烦恼的地方是在它初始化的时候。STL中容器的初始化比C/C++数组初始化要麻烦的多。你只能一个元素一个元素地来,或者先初始化一个普通数组再通过转化填放到容器中。我认为人们通常可以这样做://程序:初始化演示//目的:为了说明STL中的向量是怎样初始化的。#include<cstring>//<cstring>和<string.h>相同#include<vector>usingnamespacestd;intar[10]={12,45,234,64,12,35,63,23,12,55};char*str="HelloWorld";intmain(intargc,char*argv[]){vector<int>vec1(ar,ar+10);vector<char>vec2(str,str+strlen(str));return0;}在编程中,有很多种方法来完成同样的工作。另一种填充向量的方法是用更加熟悉的方括号,比如下面的程序://程序:vector演示二//目的:理解带有数组下标和方括号的STL向量#include<cstring>#include<vector>#include<iostream>usingnamespacestd;char*szHW="HelloWorld";intmain(intargc,char*argv[]){vector<char>vec(