因为老师说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>

 pair的定义:
  namespace std{
      template <typename T1,typename T2>
      struct pair{
          T1 first;
          T2 second;
          ...
      };
  }

 pair的初始化:
 .   pair<T1,T2> p;  //默认构造函数,如果要为p赋值要用make_pair方法,如
       p=make_pair(,);   //这里的T1,T2就是int类型
 .   pair<T1,T2> p(,);  //直接给p赋值
 .   pair<T1,T2> p(p2);   //Copy构造函数,将p2的值赋给p
 .   pair<T1,T2> p(rv);    //Move构造函数,将rv的值移动到p(允许隐式类型转换)

 pair赋值:
 .   p=p2;   //将p2的值赋给p;
 .   p.first ,  p.second  ;    //求出p的第一个和第二个的值
 .   >(p);  //等同于p.first   (始自C++11)
 .   >(p);  //等同于p.second(始自C++11)

 pair比较:
 .   p1==p2;    //返回p1是否等于p2,即bool值,等同于p1.first==p2.first&&p1.second==p2.second  ,其他同理
 .   p.swap(p1);   //交换p,p1的值(始自C++11)
 .   swap(p1,p2);  //同上,swap是个全局函数(始自C++11)

 pair赋值:
 p=make_pair(v1,v2);

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

 typedef std::pair<int,float> IntFloatPair;
 IntFloatPair p(,3.14);

 std::>(p);   //获得第一个值
 std::>(p);   //获得第二个值
 std::tuple_size<IntFloatPair>::value;   //获得元素的个数
 std::tuple_element<IntFloatPair>::type;  //获得元素的类型

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

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

#include <iostream>
#include<utility>
#include<typeinfo>
using namespace std;
typedef std::pair<int,float> IntFloatPair;
int main(int argc, char *argv[])
{

    IntFloatPair p(,3.14);
    std::>(p);   //获得第一个值
    std::>(p);   //获得第二个值
    cout<<std::tuple_size<IntFloatPair>::value<<endl;   //获得元素的个数
    cout<<typeid(std::tuple_element<,IntFloatPair>::type).name()<<endl;  //获得元素的类型
    cout<<typeid(p.first).name()<<endl;  //用typeid输出变量类型
    cout<<>(p)<<endl;
    cout<<p.first<<endl;
    ;
}

pair<int,float> p;   //p.first和p.second默认为0,如果是pair<string,char> p; 则p.first,p.second估计是nul
#include<iostream>
#include<utility>
#include<tuple>
using namespace std;

class Foo{
public:
    Foo(tuple<int,float>){
        cout<<"Foo::Foo(tuple)"<<endl;
    }
    template<typename...Args>  //变长参数模板,Args是模版
    Foo(Args... args){
        cout<<"Foo::Foo(args...)"<<endl;
    }
};

int main()
{
    tuple<,2.22);
    pair<,t);
    pair<),t);
    ;
}

上述代码中,只有当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. hdu 2489 最小生成树状态压缩枚举

    思路: 直接状态压缩暴力枚举 #include<iostream> #include<algorithm> #include<cstdio> #include< ...

  2. ORACLE中大数据量查询实现优化

    大数据量查询,对数据库开发者来说,性能问题往往是最需要费尽心机的,借此总结自己优化此类问题的心得与大家分享,以免大家走更多的弯路. 1.使用主键临时表 大数据量表关联查询,是性能开销的主要原因.通过主 ...

  3. sql分割以逗号隔开的字符串

    --创建存储过程 IF EXISTS (SELECT * FROM sysobjects WHERE name='GetSplitString' AND xtype='p') DROP PROCEDU ...

  4. JS 异常: Uncaught RangeError: Maximum call stack size exceeded

    遇到了这个js异常, 总是吧浏览器搞崩溃,这是什么原因呢? 开始我也只能想到死循环, 也许是哪个条件判断写错了,其实不是.经过google,发现了一篇文章,内容请看: ================ ...

  5. 浅析js中的this

    this的用法 this在日常javascript编码中很常见, 但是一直以来没有好好总结过. 今天在这里好好总结一下. 本文只讨论浏览器环境. this指向全局 var name = "w ...

  6. 深入浅出ExtJS 第二章 Ext框架基础

    2.1 面向对象的基础架构(对象模型) 2.1.1 创建类 >.定义一个类: Ext.define('demo.Demo',{ name:'Lingo', hello:function () { ...

  7. Jquery 计算表格某一列的合计

    <script type="text/javascript"> function heji(table_id, lie, val_id) { //合计 --xpp // ...

  8. 关于sql中constraint 前缀的用意(PK、UK、DF、CK、FK)

    --主键constraint PK_字段 primary key(字段), --唯一约束constraint UK_字段 unique key(字段), --默认约束constrint DF_字段 d ...

  9. Sublime Python 插件配置合集

    Python PEP8 Autoformat 插件 这是用来按PEP8自动格式化代码的.可以在包管理器中安装.快捷键 CTRL+SHIFT+R 自动格式化python代码 { "auto_c ...

  10. 通信行业OSS支撑系统软件研发思考

    一般的,对所谓大型.通信行业.OSS支撑软件系统,我们可宏观定义以下几点: 以年计的研发周期 以几十人计的研发团队 以百计的业务菜单功能点 以千计的数据库表 以万计的业务术语指标 以亿计的数据表记录 ...