本文共 4243 字,大约阅读时间需要 14 分钟。
//常见的4个库,需要记住了#include#include #include #include int main(){ }
//注意下面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
//注意下面pair里面不一定就是int与string,也可以是别的类型//1.定义pair的三种方式 pairp(1,"a"); pair p2 = { 2,"不"}; pair p3 = make_pair(3,"可以");//2.获取pair的两个值 cout< <<" "< < > p4;
//常见的函数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对应的字符数组首地址
//需要使用头文件:#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
//需要使用头文件:#includepriority_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;//这是小根堆
//需要使用头文件:#include//1.stack常用的函数,无clear()函数 stack s; s.push(1); s.push(2); s.top();//获取栈顶元素2 s.pop();//弹出栈顶元素2 s.size();//获取栈的大小 s.empty();//判断栈是否为空
//需要使用头文件:#includedeque 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();//清空双向队列
//需要使用头文件:#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.参数是迭代器,则删除迭代器里指向的元素 */
//需要使用头文件:#include
最后是:
unordered_map:使用 #include<unordered_map>,下同
unordered_set unordered_multimap unordered_multiset
这四个模板也可以使用上面的方法,来增删改查,且复杂度O(1),但是不支持lower_bound()与upper_bound()方法,前面讲的set/multiset与map/multimap支持迭代器的++与–,但是这四个不支持++与–
//需要使用头文件:#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/