C++STL常用知识
转载自:C++:STL标准入门汇总 - 施杨 - 博客园 (cnblogs.com)
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)
万能头文件:#include <bits/stdc++.h>
STL的13个头文件:
由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
**<deque>双队列**
**<functional> 定义了一些模板类,用以声明函数对象。**
**<iterator>提供了迭代器使用的许多方法**
**<vector>向量**
**<list>列表**
**<map>映射**
**<memory>**
**<numeric> 只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。**
```cpp
**<queue>队列**
**<set>集合**
**<stack>栈**
**<utility>包括了贯穿使用在STL中的几个模板的声明,**
算法
**<algorithm><functional> <numeric>**
STL容器
**<vector>向量(vector) 连续存储的元素**
**<list>列表(list) 由节点组成的双向链表,每个结点包含着一个元素**
**<deque>双队列(deque) 连续存储的指向不同元素的指针所组成的数组**
**<set>集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序。多重集合(multiset) 允许存在两个次序相等的元素的集合**
**<map>映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列。多重映射(multimap) 允许键对有相等的次序的映射**
**<stack>栈(stack) 后进先出的值的排列**
**<queue>队列(queue) 先进先出的执的排列。优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列**
迭代器
**<iterator><utility>**
实际运用与细节补充:
……持续更新……
< vector > 向量
- 大小可以根据实时更新而变化的一个容器,多用于来代替普通数组
- 用法:
-
定义:vector<数据类型> 变量名; 或 vector<数据类型> 变量名(最大容量); (也可储存结构体或类的值)
vector<int> v;// int类型的容器v vector<int> v(5);//int类型的容器v最大容量为5
还有一种就是多维的vector,数据类型为vector时便是二维的容器,如
vector<int> v[10];
相当于vector<vector<int > > v(10);
可以理解为是二维数组,定义了一个长度为10的数组,数组的每个元素都是一个Vector类型的变量。这个v[10]可以理解为一维长度是10,这个10需要是已知参数,才算一维长度不变,二维长度可变的矩阵。 -
常用函数:
- size() //返回返回容器中元素个数
- begin() //返回头部迭代器
- end() //返回尾部+1迭代器
- clear() //清空容器
- rbegin() //返回逆首部迭代器
- rend() //返回逆尾部-1迭代器
- front() //返回首个元素
- back() //返回尾部元素
- insert() //在指定位置插入元素
- insert(position, x); //在position位置前插入值为x的元素
- insert (position, n, x); //在position的位置前插入n个值为x的元素
- insert (position, first, last); //在position的位置前插入另外一个容器的从first到last的一段序列,复杂度较高,不建议使用(first和last为迭代器)
- erase() //在指定位置删除元素
- erase(position); //删除position处的元素
- erase(first, last); //删除从first到last的一段序列,复杂度较高,不建议使用(first和last为迭代器)
- empty() //判断是否为空
- pop_back() //弹出最后一个元素
- push_back() //在末尾添加一个元数
- 常用于添加比insert()快
- emplace_back() //和push_back()是一样的作用
-
遍历方法:
- vector v;
- 下标遍历(和数组类似)
- for(int i=0;i<v.size();i++){
cout<<v[i]<<’ ';
}
- for(int i=0;i<v.size();i++){
- 迭代器遍历
- vector::iterator it; //迭代器
for(it=v.begin();it!=v.end();it++){
cout<<*it<<’ ';
}
- vector::iterator it; //迭代器
- foreach遍历
- for(int a : v){
cout<<a<<’ ';
}
- for(int a : v){
-
The Last
C++头文件一览C、传统 C++
#include <assert.h> 设定插入点
#include <ctype.h> 字符处理
#include <errno.h> 定义错误码
#include <float.h> 浮点数处理
#include <fstream.h> 文件输入/输出
#include <iomanip.h> 参数化输入/输出
#include <iostream.h> 数据流输入/输出
#include <limits.h> 定义各种数据类型最值常量
#include <locale.h> 定义本地化函数
#include <math.h> 定义数学函数
#include <stdio.h> 定义输入/输出函数
#include <stdlib.h> 定义杂项函数及内存分配函数
#include <string.h> 字符串处理
#include <strstrea.h> 基于数组的输入/输出
#include <time.h> 定义关于时间的函数
#include <wchar.h> 宽字符处理及输入/输出
#include <wctype.h> 宽字符分类
标准 C++
#include <algorithm> 通用算法
#include <bitset> 位集容器
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex> 复数类
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque> 双端队列容器
#include <exception> 异常处理类
#include <fstream>
#include <functional> 定义运算函数(代替运算符)
#include <limits>
#include <list> 线性列表容器
#include <map> 映射容器
#include <iomanip>
#include <ios> 基本输入/输出支持
#include <iosfwd> 输入/输出系统使用的前置声明
#include <iostream>
#include <istream> 基本输入流
#include <ostream> 基本输出流
#include <queue> 队列容器
#include <set> 集合容器
#include <sstream> 基于字符串的流
#include <stack> 堆栈容器
#include <stdexcept> 标准异常类
#include <streambuf> 底层输入/输出支持
#include <string> 字符串类
#include <utility> 通用模板类
#include <vector> 动态数组容器
#include <cwchar>
#include <cwctype>
C99 增加
#include <complex.h> 复数处理
#include <fenv.h> 浮点环境
#include <inttypes.h> 整数格式转换
#include <stdbool.h> 布尔环境
#include <stdint.h> 整型环境
#include <tgmath.h> 通用类型数学宏