一些总结,有错误欢迎指正!!!
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//vector
vector<int> a;
a.size();
a.empty();
a.clear();
a.front();
a.back();
a.push_back();
a.pop_back();
a.begin(), a.end();
//[]支持随机寻址,类似数组
//遍历方式:3种
for(int i = 0; i < a.size(); i ++ )
for(vector<int>::iterator i = a.begin(); i != a.end(); i ++ )
//vector::iterator 可以写成auto
for(auto x : a)
//支持比较运算,按照字典序
return 0;
}
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//pair 好处是相当于帮我们实现了一个结构体,并且自带一个比较函数
pair<int, string> p;
p.first();
p.sceond();
//支持比较运算,
p = make_pair(10, "aaa");
p = {20, "abc"};
//也可以存3个东西
pair<int, pair<int, int>> pp;
return 0;
}
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//string
string s = "aaa";
s.size();
s.length();//功能和size一样
s.empty();
s.clear();
//支持直接加的操作
s += "bbb";
a.substr(1, 2);//两个参数,1是开始取子串的下标,2是子串的长度。
//如果第二个参数超过了剩余部分的长度,就会到串的最后停止。
//也可以不给参数,默认直接取到最后
//如果用printf输出时:需要注意,可以用s.c_str()取到s存储字符串的起始地址
printf("%s", s.c_str());
return 0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//queue 先进先出
queue<int> q;
q.size();
q.empty();
// 注意没有clear 函数
q = queue<int>(); //想要清空一个队列可以重新构造一个
q.push(); //向队尾插入一个元素
q.front(); //返回队头元素
q.back(); //返回队尾元素
q.pop(); //弹出队头元素
return 0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//priority_queue 默认大根 ,别忘记这个需要include queue
//实现小根//(1)插入的时候插入-x;
//(2)priority_queue, greater> heap;
priority_queue<int> heap;
heap.push();//插入一个元素
heap.top(); //返回堆顶元素
heap.pop(); //弹出堆顶元素
return 0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//stack
stack<int> stk;
stk.size();
stk.empty();
stk.push();
stk.top();
stk.pop();
return 0;
}
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//deque 双端队列,相当于加强版的vector
deque<int> q;
q.size();
q.empty();
q.clear();
q.front();
q.back();
q.push_back();//队尾插入
q.pop_back();//队尾弹出
q.push_front();//队头插入
q.pop_front;//队头弹出
//也支持[]随机寻址
q.begin(); //支持迭代器
q.end();
return 0;
}
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//动态维护有序序列
//(1)set & multiset :size(), empty(), clear() 时间复杂度O(logn)
//begin(), end() ++ -- 返回前驱和后继 时间复杂度O(logn)
set<int> S; //不能有重复元素,插入一个重复元素会被忽略,以下函数时间复杂度基本都是logn
multiset<int> MS;
S.insert();//插入一个数
S.find(); //查找一个数, 不存在返回end()
S.count(); //返回一个数的个数,set只返回0或者1
S.erase(); //(1)输入是一个数x,删除所有x(multiset会把所有的x都删掉)O(k + logn)
//(2)输入一个迭代器,删除这个迭代器(只会删一个迭代器)
lower_bound(x); //返回的是: 大于等于x的最小的数的迭代器,如果不存的话返回end()
upper_bound(x); //返回的是: 大于 x的最小的数的迭代器
//(2)map & multimap :size(), empty(), clear(), begin(), end() ++ -- 返回前驱和后继
map<string, int> M;
M["aaa"] = 1; //将aaa映射到1
multimap<int> MM;
S.insert(); //一个映射,插入的数是一个pair
S.erase(); //出入参数是一个pair或者迭代器
S.find();
//[] 像用数组那样用,但是时间复杂度是O(logn)
lower_bound();
upper_bound();
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//和set、map、multiset、multimap用法类似,但是增删改查时间复杂度是O(1)
//不支持 lower_bound() 和 upper_bound(), 以及迭代器的 ++ --
unordered_set<string, int> a;
unordered_map<string, int> b;
unordered_multiset<string, int> c;
unordered_multimap<string, int> d;
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
//bitset 可以省8倍空间
bitset<10000> S;
//支持所有位运算操作
/*
~s, &, |, ^
>>, <<
==, !=
[]
*/
count(); //返回有多少个1
any(); //判断是否至少有一个1
none();//判断是否全为0
set();//把所有位置设置成1
set(k, v); //将第k位变成v
reset(); //把所有位变成0
flip(); //取反,等价于~
flip(k);//把第k位取反
return 0;
}