关于STL的用法

😎vector 可增长数组
插n个数,申请o(logN),copy平均o(1);
申请三法:
    vector<int> a;
    vector<int> b(3);//建3个空间
    vector<int> c(3,4);//建3个空间,每个是4
遍历三法:
    for(int i=0;i<a.size();i++) a[i];//下标遍历
    for(auto i=begin();i!=end();i++) *i;//迭代器遍历
    for(auto x:a) x;//范围遍历
支持比较运算(按字典序)
    vector<int> a(3,4),b(4,3);
    a>b

😎pair<int,int>有序对
first 第一元素        second第二元素
支持比较运算:以first为第一关键字,second为第二关键字
赋值二法
    pair<int,string> p;
    p=make_pair(10,"abc");
    p={20,"abc"};
三个属性
    pair<int,pair<int,string>> p;

😎string

支持加法,直接加在字符串后面
    string a="a";
    a+="bc";
//a现在为“abc”
substr(1(,2))函数——返回指定子串
    cout<<a.substr(1,2);//1为子串起始下标,2为子串长度(可省)如果大于实际长度则有多少返回多少
c_str()——把string按char形式返回
    printf("%s",a.c_str());

😎queue队列
无clear()函数;

😎priority_queue优先队列
无clear();
默认为大根堆
变成小根堆的方法:
1.插入-x,出来时转成x
2.
    priority_queue<int,vector<int>,greater<int>>q;
greater<>里面不可以放结构体

😎deque双端队列
效率慢!!
有clear();
push_back()            pop_back()
push_front()             pop_front()
[ ]支持随机存储
头尾   begin(),end()

😎set集合(不可有重复元素,有后者忽略) multiset(可以存在重复)
set红黑树(平衡二叉树) 询问时间复杂度为o(log2n)
multiset搜索二叉树
set和multiset的唯一“卵用”:求大于(大于或等于)value的前几个元素是什么(lower,upper),频繁插入删除,随时询问
其它用一般用unordered_set看在不在集合里
对于可重复元素用unordered_map检查是否在集合里
erase(x)
————    x是一个数,删除所有x                时间复杂度o(x的个数+logN)
————    x是一个迭代器,删除这个迭代器所指
lower_bound(x)返回大于等于x最小数的迭代器,针对可重复返回最前面
upper_bound(x)返回大于x最小数的迭代器
++后继    --前驱            时间复杂度o(logN)

😎map映射 multimap可重复映射
map询问时间复杂度为o(log2n),询问为o(1)
multimap插入复杂度为o(log2n),询问为o(1)
insert(x)x为一个pair
erase(x)x为一个pair或者迭代器
[ ]支持随机存储

    map<string,int> m;
    m["abc"]=1;
    cout<<m["abc"]<<endl;//取读操作时间复杂度o(logN)

😎unordered_ 无序的set,multiset,map,multimap
底层用的是hash
增删改查的时间复杂度为o(1);
但不支持lower_bound、upper_bound、和迭代器++ -- 等于排序有关的操作
unordered_set<> , unordered_map<>,里面都不可以放结构体,只能放基本类型

对于迭代器,vector和deque,string可相互加减,map,set系列只有++,--

😎bitset压位
每个字节可用8个01——优化bool,使同样空间是bool存储的8倍
支持所有位运算
[ ]支持随机存储
定义 :bitset<长度> bi(赋值可有可无——string/char[])
count()返回有多少个1
any()是否至少有一个1
none()是否全是0
set() 把所有位 置成1        set(k,v)把k位变成v
reset()把所有位变成0
flip()是所有位取反        flip(k)第k位取反
全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务