c++方便的输出vector和map_重载的应用 【python一样写c++、二】
写程序,尤其是调试的时候,会想着直接输出一个map或者vector来调错。
但本来的cout<<没有这种功能。我们就会想了,要是c++能和python一样,直接输出一个列表(vector)或者dict(map),那有多好。
翻翻书可以知道,cout<<的<<也是重载出来的,那我们就再重载一下,来实现自己的功能呗。
老样子,先放成品
#include
using namespace std;
namespace py_pr{
template
inline ostream& out_put(ostream& o,const T & x){
return o<
inline ostream& out_put(ostream& o,const pair & x){
out_put(o,x.first);
o<<": ";
out_put(o,x.second);
return o;
}
}
template
ostream& operator<<(ostream &o,vector &x){
o<<"[";
for(auto i=x.begin();i
ostream& operator<<(ostream &o,map &x){
o<<"{";
//类似python的格式
for(auto i=x.begin();i!=x.end();++i){
if(i!=x.begin()) o<<", ";
py_pr::out_put(o,*i);
}
o<<"}"< k1={1,2,3,4};
cout< k2={"123","567","789"};
cout< k3={'a','b','c'};
cout< m1;
m1["114"]=1,m1["514"]=2;
cout< m2;
m2["114"]="1919",m2["514"]="810";
cout<
下面开始讲解。
本文作者XXOY
1.首先实现输出一个vector的功能。
只需要遍历一遍,逐个输出就行了。
可以直接for(auto i:x)
但我要特判第一个不输出逗号,所以还是使用for(auto i=x.begin();i
这样进行遍历。
2.加入格式:
给string加一个“”,给pair(map里的元素)改成 x:y的形式
为了区分string和int,通过特判输出""
考虑到复用性,就干脆写几个函数。
感谢@QuadnucYard 大佬的教导。
template
inline ostream& out_put(ostream& o,const T & x){
return o<
inline ostream& out_put(ostream& o,const pair & x){
out_put(o,x.first);
o<<": ";
out_put(o,x.second);
return o;
}
3.重载<<
这个前置芝士请百度。
我们用vector
重载
template//模板的使用
ostream& operator<<(ostream &o,vector &x){
4.聚合一下
template
ostream& operator<<(ostream &o,vector &x){
o<<"[";
for(auto i=x.begin();i
这样就可以实现了。
再如法炮制,把map的也写了。
template
ostream& operator<<(ostream &o,map &x){
o<<"{";
//类似python的格式
for(auto i=x.begin();i!=x.end();++i){
if(i!=x.begin()) o<<", ";
py_pr::out_put(o,*i);
}
o<<"}"<
OK!
这么做就可以实现一些骚操作了。
比如
int main()
{
auto k=input().split();//k的类型是vector
cout<
这样。
具体可以看我的其他文章。
input和split