13.标准模板库(STL)
目录
- 1.定义
- 2. Vector 向量容器
- 2.1.构造函数
- 2.2.支持的运算符
- 2.3. vector 函数接口的使用
- 2.4.vector 迭代的定义
- 补充: stl 库中的迭代器
- 3.双向队列
- 4.Lists(链表)
- 5.Set 二叉树
- 6. map 容器的使用 (重点)
1.定义
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.
2. Vector 向量容器
Vectors 包含着一系列连续存储的元素,其行为和数组类似。
2.1.构造函数
vector();
vector( size_type num, const TYPE &val ); //把 num 个 val 的值放到该容器中
vector( const vector &from );//拷贝构造函数
vector( input_iterator start, input_iterator end );//利用迭代器进行区间赋值
2.2.支持的运算符
2.3. vector 函数接口的使用
push_back 函数
语法: void push_back( const TYPE &val );push_back()添加值为val的元素到当前vector末尾size 函数
语法: size_type size();size() 函数返回当前vector所容纳元素的数目 void pop_back();
pop_back()函数删除当前vector最末的一个元素
2.4.vector 迭代的定义
每个stl 模板接口都有一个专用的迭代器。
vector<int>::iterator it;
补充: stl 库中的迭代器
迭代器就是 stl 库中的 一个特殊指针,功能与指针类似
官方的迭代器使用 demo:
begin 函数
语法: iterator begin();begin()函数返回一个指向当前vector起始元素的迭代器.例如,下面这段使用了一个迭代器来显示出vector中的所有元素:vector<int> v1( 5, 789 );
vector<int>::iterator it;
for( it = v1.begin(); it != v1.end(); it++ )cout << *it << endl;相关内容: end(). end 函数
语法: iterator end();
end() 函数返回一个指向当前vector末尾元素的下一位置的迭代器.注意,如果你要访问末尾元素,需要先将此迭代器自减1.相关内容: begin()
- vector 删除接口的使用
iterator erase( iterator loc ); //删除迭代器所指向的值 //返回值:一个新的迭代器 iterator erase( iterator start, iterator end );//删除 start 迭代器 -》 end 迭代器区间的值
- vector 容器的插入接口的使用
iterator insert( iterator loc, const TYPE &val ); //在 loc 位置插入 val void insert( iterator loc, size_type num, const TYPE &val );//在 loc 位置 插入 num个val void insert( iterator loc, input_iterator start, input_iterator end); //loc 位置上插入 区间 start -> end
3.双向队列
双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。
特点可以操作头部数据:
pop_front
语法: void pop_front();
pop_front()删除双向队列头部的元素push_front
语法: void push_front( const TYPE &val );
push_front()函数在双向队列的头部加入一个值为val的元素。
4.Lists(链表)
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
- 构造函数
list<int> first; // 定义一个空链表 list<int> second (4,100); // 往链表中插入4个100 list<int> third (second.begin(),second.end()); // 把一个区间的值赋值给链表 list<int> fourth (third); // 拷贝构造函数
- 接口说明
merge 语法: void merge( list &lst );void merge( list &lst, Comp compfunction );merge()函数把自己和lst链表连接在一起,产生一个整齐排列的组合链表。如果指定compfunction,则将指定函数作为比较的依据排序(sort) 语法: void sort();void sort( Comp compfunction );sort()函数为链表排序,默认是升序。如果指定compfunction的话,就采用指定函数来判定两个元素的大小。remove 语法: void remove( const TYPE &val );remove()函数删除链表中所有值为val的元素。例如 reverse 语法: void reverse();reverse()函数把list所有元素倒转unique 语法: void unique(); //删除重复的元素
使用例子:
// list::merge #include <iostream> #include <list> using namespace std;// this compares equal two doubles if // their interger equivalents are equal bool mycomparison (double first, double second) { return ( int(first)<int(second) ); }int main () {//定义两条链表list<double> first, second;//往第一条插入数据first.push_back (3.1);first.push_back (2.2);first.push_back (2.9);//往第二条插入数据second.push_back (3.7);second.push_back (7.1);second.push_back (1.4);//进行链表排序 first.sort();second.sort();//合并两条链表first.merge(second);second.push_back (2.1);//再次合并 并指定合并的排序方式 first.merge(second,mycomparison);cout << "first contains:";for (list<double>::iterator it=first.begin(); it!=first.end(); ++it)cout << " " << *it;cout << endl;return 0; }
5.Set 二叉树
集合(Set)是一种包含已排序对象的关联容器 (相等于二叉树)
- 构造函数
// constructing sets #include <iostream> #include <set> using namespace std; struct classcomp {bool operator() (const int& lhs, const int& rhs) const{return lhs<rhs;} };int main () {set<int> first; //定义空的set容器int myints[]= {10,20,30,40,50};set<int> second (myints,myints+5); //往set容器中插入5个数据 set<int> third (second); //拷贝构造函数 set<int> fourth (second.begin(), second.end()); //迭代器的方式赋值set<int,classcomp> fifth; // 指定插入的比较方法return 0; }
- 插入数据
iterator insert( iterator i, const TYPE &val );void insert( input_iterator start, input_iterator end );pair insert( const TYPE &val );
- set 插入自定义的数据类型
- 重载 比较运算符 ,提示重载参数:需要添加const
#include <iostream> using namespace std; #include <set> //练习:利用 set 容器,插入自定义的 person 数据 ,姓名,年龄,根据年龄插入。 class person {public: person(string n,int a):name(n),age(a){} string name; int age;friend bool operator<(person &a,person &b); };//重载比较运算符 bool operator<(const person &a,const person &b) {return a.age < b.age; } int main() {//定义一个 set 容器 set<person> s;person a("小明",10);person a1("小花",19);person a2("小东",7);//插入数据 s.insert(a);s.insert(a1);s.insert(a2);for(auto it=s.begin();it!=s.end();it++){cout << it->name << endl;cout << it->age << endl;}}
- 在定义set 容器的时候说明比较方法
//重新定义比较的方法 struct classcomp {bool operator() (const person& lhs, const person& rhs) const{return lhs.age>rhs.age;} };int main() {//定义一个 set 容器 set<person,classcomp> s;person a("小明",10);person a1("小花",19);person a2("小东",7);//插入数据 s.insert(a);s.insert(a1);s.insert(a2);for(auto it=s.begin();it!=s.end();it++){cout << it->name << endl;cout << it->age << endl;} }
- 重载 比较运算符 ,提示重载参数:需要添加const
- set 插入自定义的数据类型
6. map 容器的使用 (重点)
C++ map 是一种关联式容器,包含 键值对 key/value ,即每一个 key 对应一个 value
在map 容器中,所有的数据都是成对存在的。 -> pair 对组
pair 对组的使用
map 容器的构造函数
// constructing maps #include <iostream> #include <map> using namespace std;struct classcomp {bool operator() (const char& lhs, const char& rhs) const{return lhs<rhs;} };int main () {map<char,int> first; //定义一个空的 map 容器 //往map容器中插入数据first['a']=10;first['b']=30;first['c']=50;first['d']=70;map<char,int> second (first.begin(),first.end()); //赋值一个区间 map<char,int> third (second);//拷贝构造函数map<char,int,classcomp> fourth; //设置map 容器的排序方法 return 0; }
map插入数据的方法
//在pos 的位置插入 pair iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val ); //插入 start -》 end 的区间值 void insert( input_iterator start, input_iterator end );//直接插入 pair pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );
重载下标后的插入方法
// accessing mapped values #include <iostream> #include <map> #include <string> using namespace std;int main () {map<char,string> mymap;map<char,string>::iterator it;//重载后的下标插入方法 mymap['a']="an element";mymap['b']="another element";mymap['c']=mymap['b'];//重载后的下标 取出value的方法cout << "mymap['a'] is " << mymap['a'] << endl;cout << "mymap['b'] is " << mymap['b'] << endl;cout << "mymap['c'] is " << mymap['c'] << endl;cout << "mymap['d'] is " << mymap['d'] << endl;cout << "mymap now contains " << (int) mymap.size() << " elements." << endl;return 0; }//语法说明: 对象名[key] = value; //赋值 变量 = 对象名[key] //取值
map 的查找方法 (使用最多)
find 语法: iterator find( const KEY_TYPE &key );find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。//通过 key 找到 value
13.标准模板库(STL)相关推荐
- 13 标准模板库STL【C++】
13 标准模板库STL 13- 判断题 单选题 填空题 程序填空题 函数题 7-1 .查找电话号码 7-2 姓名排序 7-3 Score Processing 13+ 编程题 7-1 查找成绩并折算后 ...
- C++ 标准模板库(STL)
C++ 标准模板库(STL) C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列) ...
- c++标准模板库STL【快速查找】【最全】【常用】【语法】
c++标准模板库STL[快速查找][最全][常用][语法] c标准模板库STL快速查找最全常用语法 vector- 变长数组 set-内部自动有序且不含重复元素 ...
- c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...
- 第十章 标准模板库STL
第十章 标准模板库STL 因为是在复习时重写的,无法在PTA上验证,编程题格式可能有误. 判断题 1.可以通过下标随机访问向量vector中的元素.(T) 2.当向量对象的内存用完之后,就会产生越界错 ...
- 标准模板库STL(Standard Template Library)
标准模板库STL(Standard Template Library)指南 /*刘振飞liuzf@pku.org.cn 1999-10-20*/ / *版权所有 (C) 1999-2004 刘振飞li ...
- C++中标准模板库STL基本概念
0. 前言 C++语言的一大优势就是便于软件的重用,而重用体现在两方面: 1. 面向对象思想:继承和多态,标准类库 2. 泛程序设计(Generic Programming)思想:模板机制,标准模板库 ...
- 蓝桥杯算法竞赛系列第0章——蓝桥必考点及标准模板库STL(上)(万字博文,建议抱走)
欢迎来到:遇见蓝桥遇见你,不负代码不负卿! 目录 一.蓝桥必考点剖析 二.什么是STL 三.vector的常见用法详解 1.vector的定义 2.vector容器内元素的访问 (1).通过下标访 ...
- C++ ——模板 标准模板库STL
C++ 知识基础 流操作符 类 & 基础 初始化和重载 类 & 高级 继承和多态 模板 & 标准模板库STL 目录 C++ 一.模板 1.函数模板 2.类模板 二.标准模板库S ...
最新文章
- Python字典部分源码分析,字典是无序的
- python面试总结 博客园_python面试题总结
- 【BZOJ4028】[HEOI2015]公约数数列(分块/数量级很小法)
- java jtable导出txt_如何将jtable中的文本数据保存到文件中
- curl: (7) Failed connect to localhost:9200; Connection refused
- python语言的核心理念是_Python编程语言的核心是什么?
- android4.4 adb工具包,Android ADB工具
- C语言猜数字游戏代码
- 越想越气(拍拍购物过程)
- 图像处理 之 扫描全能王代替品
- PowerDNS Authoritative Server 3.2 RC3 发布
- 学籍管理html,河南学籍管理系统
- 我的毕业旅行--Four night in beijing
- Asta:是什么终结了我的鸽王生涯?Go 1.13 发布!
- 摸鱼一小时实现的斗牛Game【Java版】,希望各位友友远离赌博~
- 工作辛苦了,提前祝大家五一劳动节快乐!!
- java将string转为json_java 怎么将string转为json数据
- 360浏览器(QQ浏览器 等双核浏览器) 极速 IE 兼容 模式的 兼容问题处理:设置优先使用极速模式 渲染和加载
- 及时总结工作中的经验是个人成长的关键
- 江湖笑(2006[神雕侠侣]片尾主题曲)铃声 江湖笑(2006[神雕侠侣...
热门文章
- Android RelativeLayout marginRight not working
- 启动u盘还原成普通u盘(Windows Diskpart)
- 联想sr650安装centos_一次联想ThinkServer RD650 510i配置及系统安装过程
- 如何用注册表删除Win10桌面上的顽固IE图标
- 现代控制理论学习笔记
- 记一次云服务器被密码爆破的经历——关小黑屋、改密码、改端口
- 光波导的足迹和光栅分析
- 2021年茶艺师(初级)考试报名及茶艺师(初级)找解析
- 六级备考28天|CET-6|翻译井冈山|2021年12月|8:20~9:40+ ~10:17
- pyinstaller使用