中小学网站建设论文,淄博市沂源县建设局网站,上海专业高端网站建设服,遵义建设网站标准模板库就是类与函数模板的大集合。STL共有6种组件#xff1a;容器#xff0c;容器适配器#xff0c;迭代器#xff0c;算法#xff0c;函数对象和函数适配器。1、容器#xff1a; 容器是用来存储和组织其他对象的对象。STL容器类的模板在标准头文件中定义。主要如下所… 标准模板库就是类与函数模板的大集合。STL共有6种组件容器容器适配器迭代器算法函数对象和函数适配器。1、容器 容器是用来存储和组织其他对象的对象。STL容器类的模板在标准头文件中定义。主要如下所示 ①序列容器 基本的序列容器是上面图中的前三类 关于三者的优缺点主要是 A:vectorT矢量容器可以随机访问容器的内容在序列末尾添加或删除对象但是因为是从尾部删除过程非常慢因为必须移动插入或删除点后面的所有对象。 矢量容器的操作自己以前有个表贴出来大家看看 其中的capacity表示容量size是当前数据个数。矢量容器如果用户添加一个元素时容量已满那么就增加当前容量的一半的内存比如现在是500了用户添加进第501个那么他会再开拓250个总共就750个了。所以矢量容器当你添加数据量很大的时候需要注意这一点哦。。。 如果想用迭代器访问元素是比较简单的使用迭代器输出元素的循环类似如下 [cpp] view plaincopy vectorint::iterator表示矢量容器vectorint的迭代器。。。 [cpp] view plaincopy for(vectorint::iterator iter number.begin(); iternumber.end(); iter)//这里的iterator iter算是一个指针了 cout *iter; 当然也可以用我们自己的方法但是感觉用上面的更好一些。 [cpp] view plaincopy for(vectorint::size_type i0; inumber.size(); i) cout number[i] 排序矢量元素 对矢量元素的排序可以使用algorithm头文件中定义的sort()函数模板来对一个矢量容器进行排序。但是有几点要求需要注意 sort()函数模板用运算符来排列元素的顺序所以容器中对象必须可以进行运算如果是基本类型可以直接调用sort()如果是自定义对象必须对进行运算符重载两个迭代器的指向必须是序列的第一个对象和最后一个对象的下一个位置。比如sort(people.begin(), people.end());//这里两个参数就是迭代器的意思了 B:dequeT容器非常类似vectorT且支持相同的操作但是它还可以在序列开头添加和删除。 dequeT双端队列容器与矢量容器基本类似具有相同的函数成员但是有点不同的是它支持从两端插入和删除数据所以就有了两个函数push_front和pop_front。并且有两个迭代器变量 [cpp] view plaincopy span stylefont-size:18px;#include deque dequeint data;//创建双端队列容器对象 dequeint::iterator iter;//书序迭代器 dequeint::reverse_iterator riter;//逆序迭代器。 //iter和riter是不同的类型/span C:listT容器是双向链表因此可以有效的在任何位置添加和删除。列表的缺点是不能随机访问内容要想访问内容必须在列表的内部从头开始便利内容或者从尾部开始。 ②关联容器 mapK, T映射容器:K表示键T表示对象根据特定的键映射到对象可以进行快速的检索。 有关它的创建以及查找的操作作如下总结 [cpp] view plaincopy //创建映射容器 mapperson, string phonebook; //创建要存储的对象 pairperson, string entry pairperson, string(person(mel, Gibson), 213 345 567); //插入对象 phonebook.insert(entry);//只要映射中没有相同的键就可以插入entry //访问对象 string number phonebook[person(mel, Gibson)];//如果这个键不存在会默认将这个键插入 //如果不想在找不到的时候插入可以先查找然后再检索 person key person(mel, Gibson); mapperson, string::iterator iter phonebook.find(key);//创建迭代器就认为是指针就好了 if(iter ! phonebook.end()) string number iter-second; 2、容器适配器 容器适配器是包装了现有的STL容器类的模板类提供了一个不同的、通常更有限制性的功能。具体如下所示 A:queueT队列容器通过适配器实现先进先出的存储机制。我们只能向队列的末尾添加或从开头删除元素。push_back() pop_front() 代码queuestring, liststring names;(这就是定义的一个适配器)是基于列表创建队列的。适配器模板的第二个类型形参指定要使用的底层序列容器主要的操作如下 B:priority_queueT优先级队列容器是一个队列它的顶部总是具有最大或最高优先级。优先级队列容器与队列容器一个不同点是优先级队列容器不能访问队列后端的元素。 默认情况下优先级队列适配器类使用的是矢量容器vectorT当然可以选择指定不同的序列容器作为基础并选择一个备用函数对象来确定元素的优先级代码如下 [cpp] view plaincopy priority_queueint, dequeint, greateint numbers; C:stackT堆栈容器其适配器模板在stack头文件中定义默认情况下基于dequeT容器实现向下推栈即后进先出机制。只能访问最近刚刚进去的对象 [cpp] view plaincopy span stylefont-size:18px;//定义容器 stackperson people; //基于列表来定义堆栈 stackstring, liststring names;/span 基本操作如下 3、迭代器 具体它的意思还没怎么看明白书上介绍迭代器的行为与指针类似这里做个标记看看后面的例子再给出具体的解释 具体分为三个部分输入流迭代器、插入迭代器和输出流迭代器。 、 看这一章的内容看的我有点抑郁了都摘段课本介绍的内容还是可以帮助理解的 iterator头文件中定义了迭代器的几个模板①流迭代器作为指向输入或输出流的指针他们可以用来在流和任何使用迭代器或目的地之间传输数据。②插入迭代器可以将数据传输给一个基本序列容器。头文件中定义了两个流迭代器模板istream_iteratorT用于输入流ostream_iteratorT用于输出流。T表示从流中提取数据或写到流中的对象的类型。头文件还定义了三个插入模板insertT, back_insertT和front_insetT。其中T也是指代序列容器中数据的类型。 输入流迭代器用下面的程序来说明下可见具体注释 [cpp] view plaincopy #include iostream #include vector #include numeric #include sstream using namespace std; int main() { //定义矢量容器 vectorint numbers; cout 请输入整数值以字母结束:; //定义输入流迭代器。注意两个不同 //1、numberInput(cin)是指定迭代器指向流cin //2、numbersEnd没有指定是默认的默认构造了一个end_of_stream的迭代器它等价于调用end() istream_iteratorint numbersInput(cin), numbersEnd; //用户输入直到输入的不是int类型或者终止时结束。 while(numbersInput ! numbersEnd) numbers.push_back(*numbersInput); cout 打印输出 numbers.at(3) endl; //如何指定输入流呢 //确定字符串 string data(2.1 3.6 36.5 26 34 25 2.9 63.8); //指定data为输入流input。需要头文件sstream istringstream input(data); //定义迭代器 istream_iteratordouble begin(input), end; //计算数值和。 //acculumate为头文件numeric下定义的函数。 //第一个参数是开始迭代器第二个是终止迭代器(最后一个值的下一个)。第三个是和的初值注意必须用0.0用它确定数据类型是double cout 打印数据的总和 accumulate(begin, end, 0.0) endl; } 输出结果 耽误时间太多。以后再写吧 4、算法 算法是操作迭代器提供的一组对象的STL函数模板对对象的一个操作可以与前面的容器迭代器结合起来看。如下图介绍 5、函数对象 函数对象是重载()运算符的类类型的对象。就是实现operator()()函数。 函数对象模板在functional头文件中定义必要时我们也可以定义自己的函数对象。做个标记等有具体实例来进行进一步的解释。 6、函数适配器 函数适配器是允许合并函数对象以产生一个更复杂的函数对象的函数模板。