• STL整理

  • vector

  1. #include<bits/stdc++.h>
  2. #define go(i,a,b) for(int i=a;i<b;i++)
  3. using namespace std;
  4.  
  5. vector<int>b(,);//赋初值,10个元素全为1
  6. int main()
  7. {
  8. cout<<"b=";
  9. go(i,,b.size())
  10. cout<<b[i]<<" ";cout<<endl;
  11. vector<int>a(b.begin(),b.begin()+);//赋初值,b的前3个元素
  12. cout<<"a=";
  13. go(i,,a.size())
  14. cout<<a[i]<<" ";cout<<endl;
  15. a.clear();b.clear();//清空
  16. b.assign(,);//4个元素全为2
  17. a.assign(b.begin(),b.begin()+);//赋为b的前2个元素
  18. cout<<"a_front="<<a.front()<<endl;//首元素
  19. cout<<"b_front="<<b.front()<<endl;
  20. cout<<"is_empty"<<a.empty()<<endl;//不为空
  21. int c[]={,,,,,,,};
  22. vector<int>d(c,c+);//给d赋数组c
  23. a.clear();
  24. cout<<"d=";
  25. go(i,,d.size())cout<<d[i]<<" ";cout<<endl;
  26. a.assign(d.begin(),d.begin()+);//a为d前8个元素
  27. cout<<"a_back="<<a.back()<<endl;
  28. a.push_back();//尾部加入元素
  29. cout<<"a_back="<<a.back()<<endl;
  30. a.pop_back();//尾部删除元素
  31. cout<<"a_back="<<a.back()<<endl;
  32. a.erase(a.begin()+,a.begin()+);//删除第2-5个元素(从第0个开始)
  33. cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
  34. a.insert(a.begin()+,);//在第2个插入4元素
  35. a.insert(a.begin()+,,);//第3个开始插入2个0元素
  36. cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
  37. a.erase(a.begin()+,a.begin()+);
  38. cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
  39. a.insert(a.begin()+,c+,c+);//第2个元素开始插入数组c的2-5元素(c+5不插入)
  40. cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
  41. cout<<"b=";go(i,,b.size())cout<<b[i]<<" ";cout<<endl;
  42. a.swap(b);//交换a,b
  43. cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
  44. a.swap(b);
  45. cout<<"compare_a_b "<<(a>b)<<endl;//和字符串一样
  46. reverse(a.begin(),a.begin()+);
  47. cout<<"a=";go(i,,a.size())cout<<a[i]<<" ";cout<<endl;
  48. cout<<"find_7="<<*find(a.begin()+,a.begin()+,)<<endl;
  49. //在第1-8(不包括8)个元素中找7,返回指针
  50. b.resize();//把b的容量变为20,多了为随机少了删掉
  51. cout<<"V="<<b.capacity()<<endl;//b的容量
  52. copy(a.begin(),a.end(),b.begin()+);//从b的第二个开始被a覆盖
  53. cout<<"b=";go(i,,b.size())cout<<b[i]<<" ";cout<<endl;
  54. }
  • set

  set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值(也就是集合的特性)。

set的各成员函数列表如下:

1. begin()--返回指向第一个元素的迭代器

2. clear()--清除所有元素

3. count()--返回某个值元素的个数

4. empty()--如果集合为空,返回true

5. end()--返回指向最后一个元素的迭代器

6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器

7. erase()--删除集合中的元素

8. find()--返回一个指向被查找到元素的迭代器

9. get_allocator()--返回集合的分配器

10. insert()--在集合中插入元素

11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

12. key_comp()--返回一个用于元素间值比较的函数

13. max_size()--返回集合能容纳的元素的最大限值

14. rbegin()--返回指向集合中最后一个元素的反向迭代器

15. rend()--返回指向集合中第一个元素的反向迭代器

16. size()--集合中元素的数目

17. swap()--交换两个集合变量

18. upper_bound()--返回大于某个值元素的迭代器

19. value_comp()--返回一个用于比较元素间的值的函数

  1. #include<iostream>
  2. #include<set>
  3. #include<cstdio>
  4. #include<cstring>
  5. using namespace std;
  6. set<int>s;
  7. struct node
  8. {
  9. int x;
  10. friend bool operator < (const node &a,const node &b)
  11. {
  12. return -a.x<-b.x;
  13. }
  14. };
  15. set<node>ms;
  16. int main()
  17. {
  18. s.insert();
  19. s.insert();
  20. s.insert();
  21. s.insert();
  22. cout<<"begin:"<<*s.begin()<<endl;
  23. cout<<"count(1):"<<s.count()<<endl;
  24. cout<<"end:"<<*s.end()<<endl;
  25. cout<<"is empty:"<<s.empty()<<endl;
  26. s.clear();
  27. cout<<"is empty:"<<s.empty()<<endl;
  28. s.insert();
  29. s.insert();
  30. s.insert();
  31. s.insert();
  32. cout<<"count(1):"<<s.count()<<endl;
  33. s.erase();
  34. cout<<"count(1):"<<s.count()<<endl;
  35. cout<<"size:"<<s.size()<<endl;
  36. cout<<"*iterator find(3):"<<*s.find()<<endl;
  37. s.insert();
  38. cout<<"count(2):"<<s.count()<<endl;
  39. s.erase();
  40. cout<<"count(2):"<<s.count()<<endl;
  41. s.clear();
  42. int a[]={,,,};
  43. s.insert(a,a+);
  44. set<int>::iterator iter;
  45. cout<<"contain:";
  46. for(iter=s.begin();iter!=s.end();iter++)
  47. cout<<*iter<<" ";cout<<endl;
  48. cout<<"key>3:"<<*s.upper_bound()<<endl;
  49. cout<<"key<3:"<<*s.lower_bound()<<endl;
  50. ms.insert((node){});
  51. ms.insert((node){});
  52. ms.insert((node){});
  53. ms.insert((node){});
  54. set<node>::iterator it;
  55. cout<<"ms contain:";
  56. for(it=ms.begin();it!=ms.end();it++)
  57. cout<<it->x<<" ";cout<<endl;
  58.  
  59. }
  •   $TIPS:$可以直接通过$set.insert(a,a+4)$插入多个元素,$find,upperbound,lowerbound$返回的是迭代器,$erase$有三种用法:$set.erase(iter),set.erase(begin,end),set.erase(keyval)$,分别为删除指针指向的值,两个指针间的值,键值。

  • bitset

  $bitset$是一个$01$串,每一位占一个$bit$,可以进行单点$0/1$修改,左移右移以及按位运算操作。一个非常好用的用法是统计某个数是否出现过,类似一个桶。同时两个$bitset$取或可以在优秀的复杂度下获得两个集合是否有重复元素的信息。它既是一个用于位运算的数组也是整形的一个压缩。

  1.$bitset$里的小标从左往右递减,即最右边下标为0。

  如下表:

  

0 0 0 0 0 1 0 1

1

下标 8 7 6 5 4 3 2 1 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. bitset<>s(string(""));//字符串从右往左赋值
  4.  
  5. int main()
  6. {
  7. cout<<s<<endl;//输出为0000010101
  8. unsigned int k=s.to_ulong();//自动转化为数字
  9. cout<<k<<endl;
  10. string str=s.to_string();
  11. cout<<str<<endl;//自动转化为01字符串
  12. s.set();//全部赋为1
  13. cout<<s<<endl;
  14. s.reset();//清零
  15. cout<<s<<endl;
  16. s.set();//把下标为3的位置赋为1
  17. s.set(,);//同上
  18. s.set(,);//赋为0
  19. cout<<s<<endl;
  20. cout<<s.test()<<endl;//检测3的值
  21. cout<<s.test()<<endl;//检测4的值
  22. s.reset();
  23. s[]=;//赋值方法1
  24. cout<<s<<endl;
  25. s=;//赋值方法2
  26. cout<<s<<endl;
  27. cout<<s.any()<<endl;//是否有1
  28. cout<<s.none()<<endl;//是否没有1
  29. s.reset();
  30. cout<<s.any()<<endl;
  31. cout<<s.count()<<endl;//有几个1
  32. s=;
  33. cout<<s.count()<<endl;
  34. s.flip();//全部取反
  35. cout<<s<<endl;
  36. s.flip();
  37. cout<<s<<endl;//下标为0取反
  38. }

C++STL整理的更多相关文章

  1. STL整理

    sort 升序排列: iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素. iterator up ...

  2. STL整理之set

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Set是什么 Set是C++STL中提供的容器,set是数学上的集合——具有唯一性,即每个元素 ...

  3. C++ STL 整理

    一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library ...

  4. 数据结构知识总结(STL整理)

    重要知识点 1.基础知识 #include<bits/stdc++.h> //万能头文件 #include< algorithm > //包含sort函数 运用sort实现多关 ...

  5. STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)

    向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back()    传回最后一个数据,不检查这个数据是否存在 ...

  6. STL整理之map

    转载请注明出处,部分内容引自李煜东<算法竞赛进阶指南> 前置知识:    C++.C语言入门 Map是什么 Map是从键(key)到值(value)的映射,其内部实现是一棵以key为关键码 ...

  7. Problem G: STL——整理唱片(list的使用)

    #include<iostream> #include<list> #include<iterator> #include<algorithm> usi ...

  8. C++常用STL

    目录 C++ 常用STL整理 容器和配接器 list(链表) stack(栈) queue(队列) priority_queue(优先队列) set(集合) vector(向量) map&&a ...

  9. 洛谷日报 & 原来博客(转载)

    震惊,新的功能:可以按Ctrl + F 进行关键字查询. \(update\) on 10.26:把这两个月的日报也加入进去了,并且修复了几个错误. 本文会把小编用过的博客和比较好的博客放在这里. 可 ...

随机推荐

  1. 利用C++实现模块隐藏(R3层断链)

    一.模块隐藏的实现原理 普通API查找模块实现思路:其通过查询在R3中的PEB(Process Environment Block 进程环境块)与TEB(Thread Environment Bloc ...

  2. 使用jsr303实现数据校验

    除了前端的js验证,服务端也可加入数据验证,springmvc中有两种方式可以验证输入 利用spring自带的验证框架 利用jsr303实现 jsr303实现数据校验 jsr303是java为bean ...

  3. eventfd(2) 结合 select(2) 源码分析

    eventfd(2) 结合 select(2) 源码分析 本文代码选自内核 4.17 eventfd(2) - 创建一个文件描述符用于事件通知. 使用 源码分析 参考 #include <sys ...

  4. Java并发编程总结(一)Syncronized解析

    Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...

  5. MySQL学习(四)深入理解乐观锁与悲观锁

    转载自:http://www.hollischuang.com/archives/934 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据 ...

  6. Vue-CLI项目-vue-cookie与vue-cookies处理cookie

    08.31自我总结 Vue-CLI项目-vue-cookie与vue-cookies处理cookie vue-cookie 一.模块的安装 npm install vue-cookie --save ...

  7. JAVA保留小数点位数

    /** * java 如何保留指定位数的小数 * @author Administrator * */ public class Test04 { public static void main(St ...

  8. SpringBoot系列教程web篇之过滤器Filter使用指南扩展篇

    前面一篇博文介绍了在 SpringBoot 中使用 Filter 的两种使用方式,这里介绍另外一种直接将 Filter 当做 Spring 的 Bean 来使用的方式,并且在这种使用方式下,Filte ...

  9. PHP call_user_func的一些用法和注意点

    版本:PHP 5.6.28 在call_user_func的调用中: 1.参数的传递过程,并不是引用传值. 1 error_reporting(E_ERROR); // 此处不是E_ALL 2 $cu ...

  10. jar包的多层级maven依赖的坑与正确传递方法

    这个问题简述起来就是项目加载jar包但是无法加载jar包的依赖 这是一个maven的特性吗? 问题发生前 程序猿经常自己写一些库实现或收集常用的逻辑方法(算法和设计模式等等),以方便多个项目使用,避免 ...