STL讲义 课件

合集下载

STL实用入门教程第五讲

STL实用入门教程第五讲

map/multimap的简介
map可以直接存取key所对应的value, 支持[]操作符,如map[key]=value。 multimap与map的区别:map支持唯 一键值,每个键只能出现一次;而 multimap中相同键可以出现多次。 multimap不支持[]操作符。

讲解纲要

讲解纲要



map/multimap的简介 map/multimap使用之前 的准备 map/multimap对象的默 认构造 map的插入与迭代器


map对象的拷贝构造与 赋值 map的大小 map的删除 map的查找
map的大小
map.size();//返回容器中元素的 数目 map.empty();//判断容器是否为 空

讲解纲要



map/multimap的简介 map/multimap使用之前 的准备 map/multimap对象的默 认构造 map的插入与迭代器


map对象的拷贝构造与 赋值 map的大小 map的删除 map的查找
map的删除



map.clear(); //删除所有元素 map.erase(pos); //删除pos迭代器所指的 元素,返回下一个元素的迭代器。 map.erase(beg,end); //删除区间[beg,end)的 所有元素 ,返回下一个元素的迭代器。 map.erase(keyElem); //删除容器中key为 keyElem的对组。


本讲回顾

容器map/multimap的使用方法
Multimap例子

struct userdevice{ string m_devicename; long m_deviceid; int m_devicePopedom; }; typedef multimap<string,userdevice> USERTABLE; typedef USERTABLE::const_iterator CIT; typedef pair<CIT, CIT> Range;

朱老师C++课程第3部分3.2.STL的容器类和迭代器PPT模板

朱老师C++课程第3部分3.2.STL的容器类和迭代器PPT模板
朱老师c++课程第3部分 3.2.stl的容器类和迭代器
演讲人 202x-11-11
one
01
第一章:stl的容器类和迭代器-第3部 分第2课
第一章:stl的容器类和迭代器-第3部分第2课
单击此处添加标题
单击此处添加文本具体内容, 简明扼要的阐述您的观点。根 据需要可酌情增减文字,以便 观者准确的理解您传达的思想。
节问题
3.2.9.stl的 不同类型迭
代器
第一章:stl的容器类 和迭代器-第3部分第2 课
3.2.13.序列容器之list2
3.2.14.序列容器之deque1
3.2.15.序列容器之deque2
感谢聆听
单击此处添加标题
单击需要可酌情增减文字,以便 观者准确的理解您传达的思想。
3.2.12.序列 容器之list1
3.2.10.序列 容器之 vector1
3.2.11.序列 容器之 vector2
3.2.7.迭代 器的引入
3.2.8.迭代 器的几个细
3.2.6.容器 类array的 初步使用5
3.2.4.容器 类array的 初步使用3
3.2.5.容器 类array的 初步使用4
3.2.1.stl的 容器类介绍
3.2.2.容器 类array的 初步使用1
3.2.3.容器 类array的 初步使用2
第一章:stl的容器类和迭代器-第3部分第2课

3-16卓跃教育_STL(一)

3-16卓跃教育_STL(一)

STL组件
• Container(容器) 各种基本数据结构 • Adapter(适配器) 可改变containers或 function object接口的一种组件 • Algorithm(算法) 各种基本算法如sort、 search…等 • Iterator(迭代器)* 连接containers和 algorithms • Function object(函数对象) * • Allocator(分配器)* 7
访问元素操作
front() 访问第一个元素
back()
[] at()
10
访问最后一个元素
无测试的下标访问(不用于 list) 有测试的下标访问(只用于 vector 和 deque)
类型成员6-3
堆栈和队列操作
push_back() pop_back() push_front() pop_front() 将新元素加入到尾部 移出最后一个元素 将新元素加入头部(只用于 list 和 deque) 移出第一个元素(只用于 list 和 deque)
container(first,last) container(x) ~container()
13
类型成员6-6
分配操作
operator=(x)
assign(n,x) assign(first,last) operator[](k) find(k) lower_bound(k) upper_bound(k) equal_range(k) key_comp() value_comp()
从包容器x中元素拷贝分配
分配n个x的拷贝(不能用于关联包容器) 从区间[first, last)中分配
关联操作
访问带有关键字k的元素(用于具有唯一关键字的包容器) 查找带有关键字k的元素 查找带有关键字k的第一个元素 查找带有大于k的关键字的第一个元素 查找带有关键字k的元素的 lower_bound和 upper_bound 获取关键字比较对象的拷贝 获取映射值比较对象的拷贝

《C++STL详解》课件

《C++STL详解》课件

2 迭代器分类
3 迭器使用
迭代器可以分为输入 迭代器、输出迭代器、 前向迭代器、双向迭 代器和随机访问迭代 器等。不同的迭代器 提供不同的操作。
通过使用迭代器,我 们可以方便地遍历容 器中的元素,执行特 定的操作。
算法
1
基本算法
2
基本算法包括find、sort、merge和
union等,用于在容器中查找元素、
《C++STL详解》PPT课件
# C++ STL详解
STL简介
STL概述
STL(Standard Template Library)是C++标准库的一部分,提供了一套模板类和函数,用于实 现常见的数据结构和算法。
STL组成部分
STL由容器、迭代器、算法、函数对象和适配器等多个部分组成。
STL优点
STL的优点包括高效性、可移植性和灵活性,使得C++程序员能够更加方便地编写高效且可维 护的代码。
无序关联式容器是一种根据 哈希函数将元素存储在桶中 的数据结构,包括 unordered_set、 unordered_multiset、 unordered_map和 unordered_multimap等。
迭代器
1 迭代器概述
迭代器是与容器或容 器的子区间相关联的 对象,用于遍历和访 问容器中的元素。
容器适配器如stack、queue和priority_queue 等,在已有容器的基础上提供了不同的接口 和功能。
迭代器适配器
迭代器适配器如reverse_iterator、inserter、 ostream_iterator和istream_iterator等,通过改 变迭代器的行为,提供了额外的功能。

STL泛型编程ppt课件

STL泛型编程ppt课件
19
string基本字符系列容器 • 从string对象尾部添加一个字符:用符号+. string s; s=s+’a’; s=s+’b’; s=s+’c’: cout<<s<<endl;
20
string基本字符系列容器 • 从string对象尾部追加字符串:用符号+或append(). string s; s=s+”abc”; //abc s=s+”123”; //abc123
vector<int>::iterator it; //定义迭代器变量 for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
12
Vector向量容器 • 元素的删除 • erase():删除迭代器所指的一个元素或一段区间中的所有元素 • clear():一次性删除vector中所有元素
容器标准类模板迭代器通用类型指针算法容器类的对象包含一组元素这组元素又同是一种类的对象
STL泛型编程
.
1
目录 • 概述 • Vector向量容器 • string基本字符系列容器 • set集合容器 • deque双端队列容器 • list双向链表容器 • stack堆栈容器 • queue队列容器
17
string基本字符系列容器
• vector<char>向量也可以处理字符串,但string更方便。 • string:字符串类,提供添加、删除、替换、查找和比较等。(头文件
#include<string>) • 创建string对象。
#include<string> #include<iostream> using namespace std; int main() {string s; cout<<s.length()<<endl; return 0; }

西电stl讲义

西电stl讲义

类和对象
class Student { char no[20]; char name[20]; char classId[20]; int age; public: Student(…); selectCourse(int cid); }
实例化 实例化
王一 03091881 030911 19 Student st1(…); Student st2=new Student(…); 李二 03091681 030912 19
西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China
主要内容
STL概述:组件、容器、迭代器(iterator)、算法 概述: 概述 、 、 、 STL容器: 容器: 容器 常用容器:vector、deque、 list、 map/multimap 、set 特殊容器:stack、queue,priority_queue string 其他容器:hashtable STL算法:搜寻、排序、拷贝、数值运算 算法: 算法 搜寻、排序、拷贝、
西安电子科技大学计算机学院 - School of Computer Science & Engineering, Xidian University, China
std::vector<int>::iterator it = v.begin() + 1; it = v.insert(it, 33); v.insert(it, q.begin(), q.end()); it = v.begin() + 3; v.insert(it, 3, -1); it = v.begin() + 4; v.erase(it); it = v.begin() + 1; v.erase(it, it + 4); v.clear(); return 0;

stl讲义

stl讲义

STL容器
• vector – 构造、拷贝和析构 操作 vector<T> c 效果 产生空的vector
vector<T> c1(c2)
vector<T> c(n)
产生同类型的c1,并将复制c2的所有元素
利用类型T的默认构造函数和拷贝构造函数生成 一个大小为n的vector 产生一个大小为n的vector,每个元素都是e
容器 container
几种常用的数据结构
常用的STL容器
(1)Vector (2)deque (3)Stack (4)queue (5)list (6)set (7)map
11.1 标准模板库简介
容器分为三大类:
标准库容器类 顺序容器 vector(向量) deque(双端队列) list(列表) 关联容器 set(集合) multiset(多重集合) map(映射) multimap(多重映射 ) 容器适配器 stack(栈) queue(队列) priority_queue (优先级队列) 说明 从后面快速插入与删除,直接访问任何元素 从前面或后面快速插入与删除,直接访问任何元素 从任何地方快速插入与删除,双链表 快速查找,不允许重复值 快速查找,允许重复值 一对一映射,基于关键字快速查找,不允许重复值 一对多映射,基于关键字快速查找,允许重复值
vector<T> c(n,e)
vector<T> c(beg,end) 产生一个vector,以区间[beg,end]为元素初值 ~vector<T>() 销毁所有元素并释放内存。
STL容器
• vector – 非变动操作 操作 c.size() c.empty() c.max_size() c.capacity() c.reserve(n) c1==c2 c1!=c2 c1<c2 c1>c2 c1<=c2 c1>=c2 效果 返回元素个数 判断容器是否为空 返回元素最大可能数量(固定值) 返回重新分配空间前可容纳的最大元素数量 扩大容量为n 判断c1是否等于c2 判断c1是否不等于c2 判断c1是否小于c2 判断c1是否大于c2 判断c1是否大于等于c2 判断c1是否小于等于c2

信息学奥赛STL数据类型简介(30张PPT)

信息学奥赛STL数据类型简介(30张PPT)


return 0;
•}
四、其他函数库
• 删除函数erase(); 根据元素的值删除元素不能根据第几个元素进行删除 • 插入元素:insert(); • clear()--清除所有元素 • count()--返回某个值元素的个数 • empty()--如果集合为空,返回true • equal_range()--返回集合中与给定值相等的上下限的两个迭代器 • find()--返回一个指向被查找到元素的迭代器 • get_allocator()--返回集合的分配器 • lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器 • key_comp()--返回一个用于元素间值比较的函数 • max_size()--返回集合能容纳的元素的最大限值 • rbegin()--返回指向集合中最后一个元素的反向迭代器 • rend()--返回指向集合中第一个元素的反向迭代器 • size()--集合中元素的数目 • swap()--交换两个集合变量 • upper_bound()--返回大于某个值元素的迭代器 • value_comp()--返回一个用于比较元素间的值的函数
不定数组(vector)
单县第一中学2017级 信息学奥林匹克竞赛知识选讲
一、定义
• Vector是一个不定数组,其大小可根据需要随时 变动,可定义为一维数组,或者二维数组,甚至 多维。
• 数据库为#include<vector> • 定义如下:
– 1一维:vector<int> vec;//定义了一个名为vec 的一维数组
代码展示(缺少头文件)
• map<long,int> m;//咱们的map桶
• int n;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编写一个对具有n个元素的数组a[ ]求最小值的程序,要求 将求最小值的函数设计成函数模板。 #include <iostream> template <class T> T min(T a[],int n) { int i; T minv=a[0]; for( i = 1;i < n ; i++){ if(minv>a[i]) minv=a[i]; } return minv; } void main() { int a[]={1,3,0,2,7,6,4,5,2}; double b[]={1.2,-3.4,6.8,9,8}; cout<<”a数组的最小值为:”
容器适配器简介
1) stack :头文件 <stack> 栈。是项的有限序列,并满足序列中被删除、 检索和修改的项只能是最近插入序列的项。即 按照后进先出的原则 2) queue :头文件 <queue> 队列。插入只可以在尾部进行,删除、检索和修 改只允许从头部进行。按照先进先出的原则。 3)priority_queue :头文件 <queue> 优先级队列。最高优先级元素总是第一个出列
有了STL,不必再从头开始编写繁多的标准数据结构和 算法,并且一样可获得非常高的性能。
模板引子
1.假如设计一个求两参数最大值的函数,在实践中我们可 能需要定义四个函数: int max ( int a , int b ) { return ( a > b ) ? a , b ; } long max ( long a , long b ) { return ( a > b ) ? a , b ;} double max ( double a , double b ) { return ( a >b)? a , b ; } char max ( char a , char b ) { return ( a > b ) ? a , b ;} 2.这些函数几乎相同,唯一的区别就是形参类型不同 3.需要事先知道有哪些类型会使用这些函数,对于未知类 型这些函数不起作用
前2者合称为第一类容器
3)容器适配器 stack:LIFO queue:FIFO priority_queue:优先级高的元素先出
容器概述
对象被插入容器中时,被插入的是对象的一个 复制品。 许多算法,比如排序,查找,要求对容器中的 元素进行比较,所以,放入容器的对象所属的 类,还应该实现 == 和 < 运算符。
Head rend begin Tail rbegin end
如何使相同的算法能用于 不同的数据结构?
见 SeqList.h 及 output.cpp
Merits Of An Iterator
iterators provide a uniform way to sequence through the elements of a data structure 迭代器提供了一种统一的方法, 用于遍 历不同数据结构的
Equality Testing
比如,数组int array[100]就是个容器,而 int * 类型的指 针变量就可以作为迭代器,可以为这个容器编写一个排 序的算法
容器概述
可以用于存放各种类型的数据(基本类型的变量,对象等)的数 据结构。 容器分为三大类:
1) 顺序容器 vector:后部插入/删除,直接访问 deque:前/后部插入/删除,直接访问 list:双向链表,任意位置插入/删除 2)关联容器 set:快速查找,无重复元素 multiset :快速查找,可有重复元素 map:一对一映射,无重复元素,基于关键字查找 multimap :一对一映射,可有重复元素,基于关键字查找
•若两容器长度相同、所有元素相 等,则两个容器就相等,否则为 不等。 •若两容器长度不同,但较短容器 中所有元素都等于较长容器中对 应的元素,则较短容器小于另一 个容器 •若两个容器均不是对方的子序列, 则取决于所比较的第一个不等的 元素
0
20
容器的成员函数
2) 只在第一类容器中的函数: begin 返回指向容器中第一个元素的迭代器 end 返回指向容器中最后一个元素后面的位 置的迭代器 rbegin 返回指向容器中最后一个元素的迭代器 rend 返回指向容器中第一个元素前面的位置 的迭代器 erase 从容器中删除一个或几个元素 clear 从容器中删除所有元素
关联容器简介
关联式容器内的元素是排序的,插入任何元素,都按相 应的排序准则来确定其位置。关联式容器的特点是在查 找时具有非常好的性能。 1) set/multiset: 头文件 <set> set 即集合。set中不允许相同元素,multiset中允许存在相 同的元素。 2) map/multimap: 头文件 <map> map与set的不同在于map中存放的是成对的key/value。 并根据key对元素进行排序,可快速地根据key来检索元素 map同multimap的不同在于是否允许多个元素有相同的 key值。 上述4种容器通常以平衡二叉树方式实现,插入和检索的 时间都是 O(logN)
C++模板与STL库介绍
提纲
1. 概论 2. 模板机制的介绍 3. STL中的基本概念 4. 容器概述 5. 迭代器 6. 算法简介
概论
C++ 语言的核心优势之一就是便于软件的重用
C++中有两个方面体现重用:
1. 面向对象的思想:继承和多态,标准类库
2. 泛型程序设计(generic programming) 的思想:模板 机制,以及标准模板库 STL
23
A Forward Iterator For Chain
class ChainIterator { public: // some typedefs omitted // constructor comes here // dereferencing operators * & ->, pre and post // increment, and equality testing operators // come here private: ChainNode<T> *current;
Increment
ChainIterator& operator++() // preincrement {current = current->link; return *this;} ChainIterator& operator++(int) // postincrement { ChainIterator old = *this; current = current->link; return old; }
泛型程序设计
泛型程序设计,简单地说就是使用模板的程序设计法。
将一些常用的数据结构(比如链表,数组,二叉树)和算法 (比如排序,查找)写成模板,以后则不论数据结构里放的是 什么对象,算法针对什么样的对象,则都不必重新实现数据结 构,重新编写算法。
标准模板库 (Standard Template Library) 就是一些常用数 据结构和算法的模板的集合。主要由 Alex Stepanov 开 发,于1998年被添加进C++标准
模板优缺点
函数模板方法克服了C语言解决上述问题时用 大量不同函数名表示相似功能的坏习惯 克服了宏定义不能进行参数类型检查的弊端 克服了C++函数重载用相同函数名字重写几个 函数的繁琐 缺点,调试比较困难
一般先写一个特殊版本的函数 运行正确后,改成模板函数
12
STL中的几个基本概念
模板的概念
1. 所谓模板是一种使用无类型参数来产生一系列 函数或类的机制。 2. 若一个程序的功能是对某种特定的数据类型进 行处理,则可以将所处理的数据类型说明为参 数,以便在其他数据类型的情况下使用,这就 是模板的由来。 3. 模板是以一种完全通用的方法来设计函数或类 而不必预先说明将被使用的每个对象的类型。 4. 通过模板可以产生类或函数的集合,使它们操 作不同的数据类型,从而避免需要为每一种数 据类型产生一个单独的类或函数。
比较两个容器的例子
比较两个容器的例子:
#include <vector> #include <iostream> int main() { std::vector<int> v1; std::vector<int> v2; v1.push_back (5); v1.push_back (1); v2.push_back (1); v2.push_back (2); v2.push_back (3); std::cout << (v1 < v2); return 0; 输出: }
顺序容器简介
1) vector 头文件 <vector> 实际上就是个动态数组。随机存取任何元素都能在常数 时间完成。在尾端增删元素具有较佳的性能。 2) deque 头文件 <deque> 也是个动态数组,随机存取任何元素都能在常数时间完 成(但性能次于vector)。在两端增删元素具有较佳的性 能。 3) list 头文件 <list> 双向链表,在任何位置增删元素都能在常数时间完成。 不支持随机存取。 上述三种容器称为顺序容器,是因为元素的插入位置同 元素的值无关。
8
模板工作方式
函数模板只是说明,不能直接执行,需要实例 化为模板函数后才能执行 在说明了一个函数模板后,当编译系统发现有 一个对应的函数调用时,将根据实参中的类型 来确认是否匹配函数模板中对应的形参,然后 生成一个重载函数。该重载函数的定义体与函 数模板的函数定义体相同,它称之为模板函数
相关文档
最新文档