因为老师说ACM考的是纯C++,所以打算抛弃VS的VC++不用了,针对纯C++的编译器有Intel Compiler(不过要钱),MinGw(个人用的),当然还有微软的VC++ 编译器,IDE你们可以选择CLion,用过几次,非常强大,可惜要钱。Dev C++,这个也很不错,个人推荐,并且这个不用配置编译环境,安装之后直接用,Code block,许多人的最爱,也得配置环境,用的也挺舒适的。我用的是QT5.7+MinGw。QT这个一定耳熟能详,不了解的自己去搜,也是非常棒的一个IDE。

第一天:通用工具(一)

Pair:他是一个结构体,里面的成员都是public,类似于字典Dictionary的键值对的格式,Pair的头文件是#include<utility>

  1. pair的定义:
  2. namespace std{
  3. template <typename T1,typename T2>
  4. struct pair{
  5. T1 first;
  6. T2 second;
  7. ...
  8. };
  9. }
  10.  
  11. pair的初始化:
  12. . pair<T1,T2> p; //默认构造函数,如果要为p赋值要用make_pair方法,如
  13. p=make_pair(,); //这里的T1,T2就是int类型
  14. . pair<T1,T2> p(,); //直接给p赋值
  15. . pair<T1,T2> p(p2); //Copy构造函数,将p2的值赋给p
  16. . pair<T1,T2> p(rv); //Move构造函数,将rv的值移动到p(允许隐式类型转换)
  17.  
  18. pair赋值:
  19. . p=p2; //将p2的值赋给p;
  20. . p.first , p.second ; //求出p的第一个和第二个的值
  21. . >(p); //等同于p.first (始自C++11)
  22. . >(p); //等同于p.second(始自C++11)
  23.  
  24. pair比较:
  25. . p1==p2; //返回p1是否等于p2,即bool值,等同于p1.first==p2.first&&p1.second==p2.second ,其他同理
  26. . p.swap(p1); //交换p,p1的值(始自C++11)
  27. . swap(p1,p2); //同上,swap是个全局函数(始自C++11)
  28.  
  29. pair赋值:
  30. p=make_pair(v1,v2);

另外,从C++11起,可以对pair使用一份tuple-like接口。

  1. typedef std::pair<int,float> IntFloatPair;
  2. IntFloatPair p(,3.14);
  3.  
  4. std::>(p); //获得第一个值
  5. std::>(p); //获得第二个值
  6. std::tuple_size<IntFloatPair>::value; //获得元素的个数
  7. std::tuple_element<IntFloatPair>::type; //获得元素的类型

QT格式化代码(使代码整齐)的快捷键是:Ctrl+A,Ctrl+I;

这就是上面的例子的具体代码,其中数据类型int输出为i,float输出为f

  1. #include <iostream>
  2. #include<utility>
  3. #include<typeinfo>
  4. using namespace std;
  5. typedef std::pair<int,float> IntFloatPair;
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9. IntFloatPair p(,3.14);
  10. std::>(p); //获得第一个值
  11. std::>(p); //获得第二个值
  12. cout<<std::tuple_size<IntFloatPair>::value<<endl; //获得元素的个数
  13. cout<<typeid(std::tuple_element<,IntFloatPair>::type).name()<<endl; //获得元素的类型
  14. cout<<typeid(p.first).name()<<endl; //用typeid输出变量类型
  15. cout<<>(p)<<endl;
  16. cout<<p.first<<endl;
  17. ;
  18. }
  19.  
  20. pair<int,float> p;   //p.first和p.second默认为0,如果是pair<string,char> p; 则p.first,p.second估计是nul
  1. #include<iostream>
  2. #include<utility>
  3. #include<tuple>
  4. using namespace std;
  5.  
  6. class Foo{
  7. public:
  8. Foo(tuple<int,float>){
  9. cout<<"Foo::Foo(tuple)"<<endl;
  10. }
  11. template<typename...Args> //变长参数模板,Args是模版
  12. Foo(Args... args){
  13. cout<<"Foo::Foo(args...)"<<endl;
  14. }
  15. };
  16.  
  17. int main()
  18. {
  19. tuple<,2.22);
  20. pair<,t);
  21. pair<),t);
  22. ;
  23. }

上述代码中,只有当std::piecewise_construct被当作第一个参数,class Foo才会被迫使用那个实参数量不定的构造函数,如果提供了Foo::Foo(int,float)的话,调用的就是他。如你所示,两个实参都必须是tuple才会强迫导致这个行为,因此,第一个参数被显示转化为tuple类型,用的是make_tuple(),也可以改传std::tuple(42)。

Tuple:tuple扩展了pair

(ACM)C++ STL 训练(第一天)的更多相关文章

  1. 几道STL题目(FJUT - OJ STL训练1)

    这个OJ一直在做,一些专题题目都很好,从易至难,阶梯上升,很适合像我这样的蒟蒻 =7= 这篇是关于其中一个专题训练的题解思路及代码   http://120.78.128.11/Contest.jsp ...

  2. ACM题目————STL练习之众数问题

    描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重的重数最大的元素成为众数.例如:S={1,2,2,2,3,5},则多重集S的众数是2, ...

  3. 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...

  4. 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 -  https://www.n ...

  5. 2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ...

  6. 2018牛客网暑假ACM多校训练赛(第四场)A Ternary String 数论

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-A.html 题目传送门 - https://www.no ...

  7. 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...

  8. C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器

    课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...

  9. ACM思维题训练 Section A

    题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...

随机推荐

  1. ps怎么给文字描边

    在设计的时候,单一的文字,往往对人没有多少的吸引力,这就需要我们在文字上加一些文字特效,比如说外发光,描边,投影,等等.在这里我们详细的介绍一下文字的输入,和文字描边的怎么增加,删除的经验.(这些方法 ...

  2. ReactNative学习-ListView

    ListView相对于View的优点就在于可以不用一下子就把数据加载完,而是滑动着加载着数据,可以缓解数据加载,避免软件卡死. 官方文档:https://facebook.github.io/reac ...

  3. Codeforces Round #198 (Div. 1) B,C 动态规划

    比赛时,开了大号去做,算了半天发现不会做A,囧.于是跑去看B,发现很水?于是很快敲完了,但是A不会,没敢交.于是去看C,一直找规律啊,后来总算调了出来,看了一下榜,发现还是算了吧,直接去睡觉了.第二天 ...

  4. SVN管理规范

    命名规范 tags 正式版 REL-X.X.X branches 发版前 RB-X.X.X 新功能 TRY-XXX 修BUG BUG-XXXX trunk 开发 使用注意事项 负责而谨慎地提交自己的代 ...

  5. IntelliJ IDEA 集成Tomcat后找不到HttpServlet问题(2015年06月13日)

    今天第一次用IntelliJ IDEA集成Tomcat做东西玩,在IntelliJ IDEA中配置好Tomcat之后,开始写Servlet,结果却找不到HttpServlet类,原因就是Intelli ...

  6. Backbone.js学习之初识hello-world

    说了好久好久要学习Backbone.js,现在终于下定决心开始学习了.然后呢,就根据我的学习进度在这里做个简单的记录,方便新人,也方便我自己以后回忆. 准备 用bower下载这几个库或框架也是醉了.. ...

  7. backbone.Model 源码笔记

    backbone.Model backbone的model(模型),用来存储数据,交互数据,数据验证,在view里面可以直接监听model来达到model一改变,就通知视图. 这个里面的代码是从bac ...

  8. Android-短信验证

    一.mob.com移动开发者服务平台(ShareSDK)的认识 该平台主要是致力于解决移动开发者的实际需求,同时也致力于一些第三方平台的框架支持,那么这样我们可以更方便的将一些功能集成到我们的App中 ...

  9. 英特尔® 实感™ SDK 前置摄像头 (F200) 常见问题解答

    原文地址 https://software.intel.com/zh-cn/articles/intel-realsense-sdk-faq-for-front-facing-camera-f200? ...

  10. 【学习笔记】【C语言】逗号运算符

    逗号运算符主要用于连接表达式,例如: int a = 9; int b = 10; a = a+1 , b = 3*4; * 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为: 表达式1, ...