95 lines
3.8 KiB
Plaintext
95 lines
3.8 KiB
Plaintext
1、vector: 变长数组,数组长度动态的变化,倍增的思想。
|
||
vector<int> a; //初始化方式
|
||
vector<int> a(n); //长度为n的
|
||
vector<int> a(n,3); //长度为n,每个元素值是3。
|
||
a.size() //返回元素的个数
|
||
a.empty() //数组是不是空的,时间复杂度是O(1)的。有变更保存的,维护的,所以是O(1)的,其它容器也是有这两个的。
|
||
a.clear() //清空 这个并不是所有容器都有clear的,比如队列就没有这个。
|
||
a.front() //返回第一个数
|
||
a.back() //返回最后一个数
|
||
a.push_back() //数组插入一个数
|
||
a.pop_back() //删除数组末尾元素
|
||
a.begin() //迭代器寻址开始
|
||
a.end() //迭代器寻址结束
|
||
两种迭代方式
|
||
vector<int> a;
|
||
for(int i=0;i<10;i++) a.push_back(i);
|
||
|
||
for(int i=0;i<a.size();i++) cout<<a[i]<<" ";
|
||
cout<<endl;
|
||
|
||
for(auto i=a.begin();i!=a.end();i++) cout<<*i<<" "; // auto --->vector<int>::iterator
|
||
cout<<endl;
|
||
|
||
c++ 11专享,效率高,代码短
|
||
for(auto x:a) cout<<x<<" ";
|
||
cout<<endl;
|
||
|
||
黑科技:支持比较运算
|
||
vector<int> a(4,3),b(3,4);
|
||
if(a<b) puts("a<b"); //字典序对比
|
||
|
||
2、pair<int,string> p 二元组
|
||
p.first 第一个元素
|
||
p.second 第二个元素
|
||
支持比较运算,默认是按字典序
|
||
|
||
p=make_pair(10,"yxc");
|
||
p={10,"yxc"}; //用于保存两种属性,是一个整体,把要排序的放到 first里,把不要排序的放在second里。如果一个东西有三种东西,也可以用pair来存储
|
||
pair<int,pair<int,int>>
|
||
|
||
|
||
3、string: c++处理字符串的利器, substr(),c_str()返回对应的字符数组的头指针。
|
||
size(),clear(),empty(),a+='c'
|
||
cout<<a.substr(下标开始位置,长度)<<endl; //注意这里是长度,不是下标的停止位置!!!其它语言都是截止位置!!!C++ NB!
|
||
|
||
4、queue: 队列push(),pop(),front(),back(),size(),但是queue没有clear函数
|
||
q=queue<int>();可以达到清空q的效果
|
||
|
||
5、priorty_queue:优先队列,push(),top(),pop() 是堆的概念,这个玩意很常用,拿堆来实现的。
|
||
//降序队列,大顶堆(默认)
|
||
priority_queue <int,vector<int>,less<int> >q;
|
||
//升序队列,小顶堆
|
||
priority_queue <int,vector<int>,greater<int> > q;
|
||
|
||
6、stack: 栈,push(),pop(),top(),empty(),size()
|
||
|
||
7、deque: 双端队列,队头队尾都可以插入删除,支持随机访问,相当于加强版的vector
|
||
size(),empty(),clear(),front(),back(),push_back(),pop_back(),push_front(),pop_front(),这TM也太强了!
|
||
还支持随机寻址,但比一般的数组慢几倍
|
||
|
||
8、set,multiset,map,multimap:基于平衡二叉树(红黑树),动态维护有序序列。
|
||
size(),insert(),find():如果不存在返回a.end迭代器,count()返回某一个数的个数
|
||
set里面不能有重复元素,multiset是可以有重复元素的
|
||
erase(x)
|
||
(1)如果是一个数,那么删除所有等于这个数的节点
|
||
(2)如果是一个迭代器,那么删除这个迭代器
|
||
lower_bound()/upper_bound()
|
||
lower_bound():返回大于等于x的最小的数
|
||
upper_bound():返回大于x的最小的数
|
||
|
||
map/multimap
|
||
insert() 插入的数是一个pair
|
||
erase() 输入的参数是pair或者迭代器
|
||
find()
|
||
|
||
9、unordered_set,unordered_map,unordered_multiset,unordered_multimap:哈希表
|
||
|
||
10、bitset:压位
|
||
比如一个整数,4个字节,32位,只需要知道每一位上的是0还是1.省空间是最牛的。能省8倍的空间。
|
||
bitset<10000> s;
|
||
~s 取反
|
||
&s 与
|
||
|s 或
|
||
^s 异或
|
||
>>,<<,==,!=,[],count(),返回有多少个1, any()判断是不是最少有1个1.
|
||
none()判断是不是全为0
|
||
|
||
set() 把所有位置成1.
|
||
set(k,v) 将第k位变成v.
|
||
reset() 把所有位置成0.
|
||
flip() 把所有位取反
|
||
flip(k) 把第k位取反
|
||
|
||
|
||
跳表老师说他也不会,没啥用。 |