(ACM)C++ STL 训练(第一天)
因为老师说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 训练(第一天)的更多相关文章
- 几道STL题目(FJUT - OJ STL训练1)
这个OJ一直在做,一些专题题目都很好,从易至难,阶梯上升,很适合像我这样的蒟蒻 =7= 这篇是关于其中一个专题训练的题解思路及代码 http://120.78.128.11/Contest.jsp ...
- ACM题目————STL练习之众数问题
描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重的重数最大的元素成为众数.例如:S={1,2,2,2,3,5},则多重集S的众数是2, ...
- 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...
- 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 - https://www.n ...
- 2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ...
- 2018牛客网暑假ACM多校训练赛(第四场)A Ternary String 数论
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-A.html 题目传送门 - https://www.no ...
- 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)
链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...
- C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器
课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...
- ACM思维题训练 Section A
题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...
随机推荐
- Unity3d之截图
1.Application.CaptureScreenshot("Screenshot.png", 0); 2. exture2D CaptureScreenshot2(Rect ...
- MVC中的Routing
Routing ASP.NET Routing模块的责任是将传入的浏览器请求映射为特有的MVC controller actions. public static void RegisterRoute ...
- ado模版不会自动生成
从数据库中更新模版的时候,其他文件都更新了,只有tt文件下的cs文件是没有更新的,没有添加也没有修改,在网上找了很久都没有这方面的信息. 其实只要删掉,重建一个ado模版就好.根本就不需要纠结.最后还 ...
- 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)
前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...
- 【转载】看懂SqlServer查询计划
看懂SqlServer查询计划 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-M ...
- JavaScript之菱形打印
很高兴来到博客园!迈入这座知识的殿堂,实是幸运.这是我的第一篇博客,开启丰富有趣的学习之旅,同时,我希望和大家一起学习一起进步,Let‘s go! <!DOCTYPE html PUBLIC & ...
- Objective-C设计模式——工厂方法模式virtual constructor(对象创建)
工厂方法模式 工厂方法模式可以控制对象的创建过程,屏蔽对象创建的细节,可以直接创建出我们所需要的已经配置好的对象. 工厂方法模式定义了创建方法的接口,让子类决定实例化哪一个类,工厂方法模式使得一个类的 ...
- ios 中的block应用
在这个大冬天里默默敲着键盘,勿喷.今天学习swift过程中,学习到闭包,发现闭包和oc的block中有很多的相同之处,又重新学习了一下并且学习了一些高级点的用法,内容如下: 1.block格式说明:( ...
- 3DES 加解密,对长度不限制
#region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...
- call与apply函数
call与apply函数 1.为什么需要call与apply函数 Javascript中,每一个函数内部都有一个特殊的关键词this,其随着所处环境的不同其指向也是不同的. 函数的内部其this也是指 ...