关于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位取反
全部评论

相关推荐

找到实习了&nbsp;给了150一天&nbsp;但是说是低代码&nbsp;值得去吗
码农索隆:是在没实习,可去,待个一两周,不行就润呗
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 13:15
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务