c++标准模板库STL【快速查找】【最全】【常用】【语法】
2018-01-16 17:31
447 查看
c++标准模板库STL【快速查找】【最全】【常用】【语法】
c标准模板库STL快速查找最全常用语法vector- 变长数组
set-内部自动有序且不含重复元素
string-字符串处理
map-键值对
queue-队列
priority_queue-优先队列
stack-栈
pair
vector- 变长数组
添加头文件:#include <vector>
定义vector:
vector<typename> name; //typename可以是任何基本类型,也可以是STL容器 vector<vector<typename> > name; //c++11之前会将>>视为移位操作,所以要加空格> >
定义vector数组:
vector<typename> Arrayname[arraySize]; //与vector<vector<typename> >不同的是一维已经固定长度为arraySize
访问:
通过下标访问
name[index]
通过迭代器访问
迭代器类似指针,定义为
vector<typename>::iterator it = name.begin()
得到
it后通过
*it来访问vector里的元素,
*(it + i)来访问第
i个元素
循环可以这样写:
for(vector<typename>::iterator it = name.begin(); it != name.end(); it++){}
常用函数:
push_back() 尾插,时间复杂度为O(1)
pop_back() 尾删,时间复杂度为O(1)
size() 长度,返回unsigned类型,时间复杂度为O(1)
clear() 清空,时间复杂度为O(n)
insert(it, x) 向迭代器it处插入元素x,时间复杂度为O(n)
erase()
删除单个元素 erase(it)
删除一个区间[first, last)的元素erase(first, last) //first与last都是迭代器
时间复杂度均为O(n)
set-内部自动有序且不含重复元素
添加头文件:#include <set>
定义set
set<typename> name;
访问
只能通过迭代器访问:
set<typename>::iterator it;
得到it之后按*it来访问set里的元素
由于除开vector和string之外的STL容器都不支持*(it + i)的访问方式,因此只能采用下列方式枚举:
for(set<typename>::iterator it = name.begin(); it != name.end(); it++){}
常用函数
insert() 时间复杂度O(logN),因为底层使用红黑树来实现
find(value) 返回对应值为value的迭代器,时间复杂度为O(logN)
erase()
删除单个元素
name.erase(it) 时间复杂度为O(1)
name.erase(value) 时间复杂度为O(logN)
删除一个区间[first, last)内的元素 name.erase(first, last), 时间复杂度为O(last−first)
size() 时间复杂度为O(1)
clear() 清空 O(N)
string-字符串处理
添加头文件#include <string>
定义
string str; string str = "abcd"; //定义的同时初始化
访问
读入输出只能用cin和cout
或者用c_str()将string类型转成字符数组,再用printf()输出
string str = "abcd"; printf("\n", str.c_str());
通过下标访问
通过迭代器访问
与vector一样可以通过*(it + i)的方式访问
常用函数
+= 拼接赋值
==、!=、<、<=、>、>=比较大小,字典序
length()/size() 返回string长度,O(1)
insert() O(N)
insert(pos, string) 在pos位置插入string
insert(it, it2, it3) it为原字符串的欲插入位置,it2和it3为待插入字符串的首尾迭代器,[it2, it3)
erase()
erase(it) 删除单个元素
erase(first, last) 删除区间[first, last)的所有元素
erase(pos, length), 删除pos处开始的length长度的字符个数
clear() O(1)
substr(pos, len) 返回从pos号位开始,长度为len的子串,时间复杂度为O(len)
string::npos 是一个常数,用以find函数失配时的返回值,即等于-1也等于4294967295(unsigned_int类型最大值)
find()
find(str2) 找子串第一次出现的位置,若不是,返回string::npos
find(str2, pos), 从str的pos号位开始匹配str2
时间复杂度为O(mn),其中n和m分别是str和str2的长度
replace() O(str.length())
replace(pos, len, str2) 把str从pos号位开始,长度为len的子串替换为str2
replace(it1, it2, str2) 把str的迭代器[it1, it2)范围的子串替换为str2
map-键值对
添加头文件#include <map>
定义
map<typename1, typename2> mp;
访问
通过下标访问,例如mp[‘a’]
通过迭代器访问
- map<typename1, typename2>::iterator it; - for(map<typename1, typename2>::iterator it = mp.begin(); it != mp.end(); it++){ //it->first; 访问键 //it->second; 访问值 }
常用函数
find(key) 返回key的映射的迭代器, 时间复杂度为O(logN), 底层红黑树实现
erase()
erase(it) O(1)
erase(key) O(logN)
erase(first, last) 删除[first, last)区间元素,O(last−first)
size() O(1)
clear() O(N)
queue-队列
添加头文件#include <queue>
定义
queue<typename> name;
访问
front() 访问队首
back() 访问队尾
常用函数
push() O(1)
front(),back() O(1)
pop() O(1) 队首出队
empty() 检测queue是否为空,返回true为空,O(1)
size() O(1)
priority_queue-优先队列
用堆来实现,每次插入元素根据元素的优先级向上调整到堆顶添加头文件
#include <queue>
定义
priority_queue< typename > name;
访问
只能通过top()函数来访问队首元素(堆顶元素),也就是优先级最高的元素
常用函数
push() 往堆底插入元素,向上调整,所以时间复杂度为O(logN)
top() O(1)
pop() 令队首元素出队,将队尾元素复制到队首,并向下调整,删除队尾,所以时间复杂度为O(logN)
empty() 检测是否为空,O(1)
size() O(1)
优先级设置
基本数据类型
priority_queue<int> q; priority_queue<int, vector<int>, less<int> > q;//vector<int>填写的是来承载底层heap的容器,less<int>是对第一个参数的比较类,less<int>表示数字大的优先级越大 priority_queue<int, vector<int>, greater<int> > q;//数字小的优先级大
结构体
struct student{ //学生成绩 string s_id; int s_grade; friend bool operator < (student s1, student s2){ //重载< 重载>号会编译错误 return s1.s_grade < s2.s_grade;//s_grade大的优先级高 //若s_grade小的优先级高,则改为return s1.s_grade > s2.s_grade; } } priority_queue<student> q;
将重载<放到student结构体外
struct cmp{ bool operator (const student &s1, const student &s2){ //使用引用避免复制,提高效率 return s1.s_grade > s2.s_grade; } } priority_queue<student, vector<student>, cmp> q;
stack-栈
添加头文件#include <stack>
定义
stack<typename > name;
访问
使用top()来访问栈顶元素
常用函数
push() O(1)
top() O(1)
pop() O(1)
empty() O(1)
size() O(1)
pair
添加头文件#include <utility>
定义
pair<typename1, typename2> p; pair<string, int> p("jetlee", 18); //定义的同时初始化 //定义临时pair的两种方式 p = pair<string, int>("jetlee", 18); p = make_pair("jetlee", 18);
访问
pair中只有两个元素,分别用first和second来访问
常用函数
比较操作数:==、!=、<、<=、>、>=;比较规则是先比较first,first相同时再比较second
相关文章推荐
- c++ STL常用查找函数count find 二分法查找
- STL中常用的c++语法
- 【转】C++ 常用的STL查找函数方法
- MTK常用函数快速查找
- C++ STL 算法精选之查找篇
- C++ 标准模板库(STL)编程示例 - multimap
- 常用排序算法C++实现(堆排序,快速排序,归并排序,基数排序)
- C++开发者快速学习Objective-C语言核心语法
- C++编程中的一些不太常用C++语法
- C++ 标准模板库STL
- C++STL快速熟悉
- c++快速查找实现(递归和非递归)
- 2016级计算机C++助教工作(2)基本语法与资料查找方法
- C++标准模板库STL
- C++ STL(标准模板库) 学习资源列表
- 【C++】STL常用容器总结之四:链表list
- 【C++】STL常用容器总结之六:基于deque的顺序容器适配器
- 【C++】STL常用容器总结之十二:string类
- C++中STL常用容器的区别
- C++ STL(标准模板库) 学习资源列表