博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++的常见STL总结
阅读量:3959 次
发布时间:2019-05-24

本文共 4243 字,大约阅读时间需要 14 分钟。

C++的常见STL总结

C++的STL模板

//常见的4个库,需要记住了#include
#include
#include
#include
int main(){
}

1.vector讲解

//注意下面vector里面不一定就是int,也可以是别的类型//需要使用头文件:#include
//1.定义一个长度为10且每一个数为3的vectorvector
vec(10,3);//2.定义一个长度为10的vector,那么初始化为0vector
a(10);//3.定义vector数组vector
b[3];//4.常见函数a.empty();//判断a是否为空a.size();//返回a的大小,这两个函数是今天讲的所有函数都有的,且时间复杂度为O(1)a.clear();//清空容器a.front();//返回第一个数a.back();//返回最后一个数a.push_back(1);//再最后假如一个数a.pop_back();//在最后删除一个数a.begin();//代表指向第一个数a.end();//代表指向最后一个数的后面一个数a.erase(a.begin());//删除第一个元素(下标为0的元素)//5.vector的倍增的思想/*系统分配空间所需的时间与分配空间大小无关,而是与分配的次数相关,比如一次分配1000个空间和1000次每次分配一个空间,后者的时间开销要大得多,那么倍增的思想就是为了减少分配的次数,比如最开始分配了32个空间,当用完后,就分配32*2个空间,并将之前的32个空间的内容拷贝过来,之后再超出空间限制在按照这个方式来倍增即可*///6.遍历Vectorfor(int i = 0;i
::iterator i=a.begin();i!=a.end();i++) cout<<*i<<" ";for(auto i=a.begin();i!=a.end();i++) cout<<*i<<" ";for(auto x:a) cout<
<<" ";//7.Vector支持比较vector
m(2,1);//[1,1]vector
n(1,2);//[2]if(m

2.pair讲解

//注意下面pair里面不一定就是int与string,也可以是别的类型//1.定义pair的三种方式 pair
p(1,"a"); pair
p2 = {
2,"不"}; pair
p3 = make_pair(3,"可以");//2.获取pair的两个值 cout<
<<" "<
<
> p4;

3.string讲解

//常见的函数string s = "abc";s.empty();//判断是否是空串,这里是指串的长度为0s.size();//获取串长,也可以使用length()string a = "qq";s+=a;//此时s="abcqq"s.substr(1,2);//表示从下标为1的字符开始截取长度为2的串,结果为bcs.substr(1)//表示把从下标1开始往后的字符全部截取,结果为bcqs.c_str();//返回s对应的字符数组首地址

4.queue讲解

//需要使用头文件:#include
//1.常见函数讲解,无clear()函数 queue
q; q.push(1); q.push(2);//从队尾依次插入1,2 q.front();//获取队头元素为1 q.back();//获取队尾元素为2 q.size();//获取队列的大小为2 q.empty();//判断队列是否为空 q.pop();//弹出队头元素1

5.priority_queue讲解

//需要使用头文件:#include
priority_queue
q;//默认是大根堆 //1.优先对列的常见函数,无clear()函数 q.empty(); q.size(); q.push(1); q.push(3); q.push(4);//分别插入元素1,3,4 q.pop();//弹出堆顶元素4 q.top();//获取堆顶元素3 //2.如何定义小根堆 //可以这么做:比如本来要插入x,但是我插入-x,不过我取出来是乘以-1就还原了 //当然也可以直接定义小根堆 priority_queue
,greater
> q2;//这是小根堆

6.stack讲解

//需要使用头文件:#include
//1.stack常用的函数,无clear()函数 stack
s; s.push(1); s.push(2); s.top();//获取栈顶元素2 s.pop();//弹出栈顶元素2 s.size();//获取栈的大小 s.empty();//判断栈是否为空

7.deque讲解

//需要使用头文件:#include
deque
deq; //1.常见函数 deq.push_back(1); deq.push_back(2);//依次在队尾插入1,2 int a = deq[0];//获取双向队列索引0处元素1 deq.pop_back(); deq.pop_back();//执行两次弹出队尾元素 deq.push_front(1); deq.push_front(2);//依次在队头插入1,2 deq.pop_front(); deq.pop_front();//两次执行在队头弹出元素 deq.size();//获取双向队列的大小 deq.empty();//判断双向队列是否为空 deq.clear();//清空双向队列

8.set与multiset讲解

//需要使用头文件:#include
,下面的方法multiset也可以使用//只不过后者可以允许重复元素 //1.常见函数 set
s; s.size();//获取s的大小 s.empty();//判断s是否为空 s.clear();//清空s s.insert(1); s.insert(2); s.insert(3); s.insert(1);//插入1两次但是最后只有一个1,因为不允许重复 s.find(1);//查找1并返回指向1迭代器,如果没有1则返回end迭代器 s.count(1);//获取1的个数,这里是1 s.lower_bound(2);//返回大于等于2的最小数的迭代器 s.upper_bound(2);//返回大于2的最小数的迭代器 //最后是erase函数,详情请参见下面链接 /* 1.参数为x,则删除所有的x O(k+logn),k是x的个数 2.参数是迭代器,则删除迭代器里指向的元素 */

9.map与multimap讲解

//需要使用头文件:#include,下面的方法multimap也可以使用//1.直接赋值   map
mm; mm["a"] = "abc";//复杂度为logn //2.常见函数 map
m; m.insert({
1,"a"});//插入的是一个pair map
::iterator i = m.find(1);//返回的是迭代器 cout<
first<<" "<
second<
first<<" "<
second<
Map; Map[1] = 1; Map[2] = 2; for(auto i = Map.begin();i!=Map.end();i++){ cout<<(*i).first<<" "; }

最后是:

unordered_map:使用 #include<unordered_map>,下同

unordered_set
unordered_multimap
unordered_multiset

这四个模板也可以使用上面的方法,来增删改查,且复杂度O(1),但是不支持lower_bound()与upper_bound()方法,前面讲的set/multiset与map/multimap支持迭代器的++与–,但是这四个不支持++与–

10.bitset讲解

//需要使用头文件:#include
//1.常见函数bitset<10> s;//定义一个长度为10的bitset,一般bitset的作用在于节省空间//bitset支持所有的逻辑运算:&,^,~,|s.set();//将s全部置为0s.set(1,0);//将第1位设置为0,注意第二个置为0置为0,非0则置为1s.reset();//将s全部置为0s.flip();//将s全部取反//2.直接获取cout<

转载地址:http://bllzi.baihongyu.com/

你可能感兴趣的文章
最重要的 12个 J2EE 最佳实践
查看>>
通过Java Swing看透MVC设计模式
查看>>
Java 理论与实践: 关于异常的争论
查看>>
编写高效的线程安全类
查看>>
提高Java代码可重用性的三个措施
查看>>
编写跨平台Java程序注意事项
查看>>
富人和穷人的12个经典差异
查看>>
java 注意事项[教学]
查看>>
MetaWeblogAPI测试
查看>>
软件配置管理概念-1,介绍
查看>>
软件配置管理概念-2,用户角色
查看>>
软件配置管理概念-3,CM系统的概念
查看>>
JSP/Servlet应用程序优化八法
查看>>
人生必修的181条佛理
查看>>
The Most Widely Used Java Libraries
查看>>
简单在单机使用apache-james(开源邮件服务器)
查看>>
lsof 快速起步
查看>>
使用ScribeFire方便地发布blog
查看>>
跨平台Java程序注意事项
查看>>
Python字符与数字的相互转换
查看>>