《STL泛型编程》PPT课件_第1页
《STL泛型编程》PPT课件_第2页
《STL泛型编程》PPT课件_第3页
《STL泛型编程》PPT课件_第4页
《STL泛型编程》PPT课件_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STL泛型编程,宁波大学大学生软件实训基地陈叶芳,目录,概述Vector向量容器string基本字符系列容器set集合容器deque双端队列容器list双向链表容器stack堆栈容器queue队列容器,概述,C+STL(StanardTemplateLibrary):C+标准模板库,又称C+泛型库。定义了常用的数据结构和算法。泛型程序设计:将程序尽可能写得通用。STL提供三种类型组件:容器标准类模板迭代器通用类型指针算法,概述,容器类的对象包含一组元素,这组元素又同是一种类的对象。数组基本顺序表都是容器类.一个整型数组和一个字符型数组,是数组容器类的两个对象,即两个容器,整型数组容器和字符数组容器.七种基本容器:向量(vector)、队列(deque)、列表(list)、串(string):顺序容器,一系列元素的有序集合集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap):关联容器,包含查找元素的键值。,概述,迭代器的作用:遍历容器。STL算法库:排序算法,不可变序算法,变序性算法,数值算法。,概述,/用向量容器装入10个数,用accumulate算法统计和#include#include/向量需要#include/算法需要usingnamespacestd;intmain()vectorv;/定义向量vinti;for(i=0;i:iteratorit=v.begin();for(;it!=v.end();it+)cout*it;coutendl;coutaccumulate(v.begin(),v.end(),0)endl;return0;,Vector向量容器,vector向量容器:对元素随机访问;在尾部插入元素;可以替代数组。Vector:内存自动管理,在插入删除元素时动态调整所占空间。#includebegin():返回首元素位置的迭代器。end():返回最后一个元素的下一元素位置的迭代器。,Vector向量容器,创建vector对象常用的三种方式:(1)不指定元素个数vectorv;(2)指定容器大小(元素格式)vectorv(10);元素下标09,初始值0(3)指定容器大小及初始值vectorv(10,8.1);元素下标09,初始值都是8.1,Vector向量容器,尾部元素扩张push_back(),#include#include/向量需要usingnamespacestd;intmain()vectorv;/定义向量vv.push_back(2);v.push_back(8);v.push_back(10);/输出语句return0;,Vector向量容器,下标访问vector元素,inti;vectorv;/定义向量vv.push_back(2);/v0=2v.push_back(8);/v1=8v.push_back(10);/v2=10for(i=0;i3;i+)coutvi;,Vector向量容器,用迭代器访问vector元素,vectorv;v.push_back(2);v.push_back(8);v.push_back(10);vector:iteratorit;/定义迭代器变量for(it=v.begin();it!=v.end();it+)cout*it“”;/输出迭代器上元素值,Vector向量容器,元素的插入insert(),vectorv(3);v0=2;v1=7;v2=9;v.insert(v.begin(),8);/插入到最前面v.insert(v.begin()+2,1);/在第2个元素前插入v.insert(v.end(),3);/在末尾插入vector:iteratorit;/定义迭代器变量for(it=v.begin();it!=v.end();it+)cout*it;,Vector向量容器,元素的删除erase():删除迭代器所指的一个元素或一段区间中的所有元素clear():一次性删除vector中所有元素,Vector向量容器,元素的删除,inti;vectorv(10);for(i=0;i:iteratorit;for(it=v.begin();it!=v.end();it+)cout*it;/06789,Vector向量容器,使用reverse反向排列算法(头文件algorithm):可将某段迭代器区间元素反向排列。,#include#include#includeusingnamespacestd;intmain()inti;vectorv(10);for(i=0;i:iteratorit;for(it=v.begin();it!=v.end();it+)cout*it;return0;,Vector向量容器,使用sort算法排序:默认升序,#include#include#includeusingnamespacestd;intmain()inti;vectorv;for(i=0;i10;i+)v.push_back(9-i);for(i=0;i10;i+)coutvi;coutendl;sort(v.begin(),v.end();for(i=0;i10;i+)coutvi;return0;,Vector向量容器,计算向量大小size():返回元素个数empty():返回向量是否为空,inti;vectorv(10);for(i=0;i10;i+)vi=i;coutv.size()endl;/元素个数10coutv.empty()endl;/0表示向量非空v.clear();coutv.empty()endl;/1表示向量空,string基本字符系列容器,vector向量也可以处理字符串,但string更方便。string:字符串类,提供添加、删除、替换、查找和比较等。(头文件#include)创建string对象。,#include#includeusingnamespacestd;intmain()strings;couts.length()endl;return0;,string基本字符系列容器,给string对象赋值(1)直接给字符串对象赋值strings;s=“helloC+STL!”coutsendl;(2)把字符指针赋给一个字符串对象strings;charss100;scanf(“%s”,ss);/scanf不支持string对象s=ss;,string基本字符系列容器,从string对象尾部添加一个字符:用符号+.strings;s=s+a;s=s+b;s=s+c:coutsendl;,string基本字符系列容器,从string对象尾部追加字符串:用符号+或append().strings;s=s+”abc”;/abcs=s+”123”;/abc123,strings;s.append(“abc”);s.append(“123”);,string基本字符系列容器,给string对象插入字符:insert().strings;s=”123456”;string:iteratorit;it=s.begin();s.insert(it+1,p);/1p23456,string基本字符系列容器,访问string对象的元素:下标法,strings;s=“abc123456”;couts0endl;,string基本字符系列容器,替换string对象的字符:replace(),strings;s=“abc123456”;s.replace(3,3,”good”);/从第3个开始,连续的3个字符替换成”good”coutsendl;/abcgood456,string基本字符系列容器,搜索string对象的元素或子串:find(),找到则返回下标,否则返回4294967295,strings;s=catdogcat;couts.find(a)endl;/查找字符acouts.find(dog)endl;/查找子串couts.find(dogc)endl;,stack堆栈容器,#include入栈:push()出栈:pop()栈顶元素:top()判断栈空:empty()元素个数:size(),stack堆栈容器,#include#includeusingnamespacestd;intmain()stacks;s.push(1);s.push(2);s.push(3);s.push(9);couts.top()endl;/读栈顶元素couts.size()endl;/返回元素个数couts.empty()endl;/判断是否空while(s.empty()!=true)/栈非空couts.top();/读栈顶元素s.pop();/出栈,删除栈顶元素return0;,queue队列容器,#include入队:push()出队:pop()读取队首元素:front()读取队尾元素:back()empty(),size(),queue队列容器,#inc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论