ACM线下赛中,很多时候并不提供很强大的调试软件,这样,如果要想调试查看map或list等信息,需要自行编写输出中间结果。
这里提供一个通用框架,并附上示例,可以作为模板使用,提交代码时注释掉#define YLOFI和#define YDELO即可。
1 #define YLOFI
2 #define YDELO
3
4 #include<iostream>
5 #include<iomanip>
6 #include<cstdio>
7 #include<string>
8 #include<sstream>
9 #include<map>
10 #include<list>
11 #include<algorithm>
12 using namespace std;
13 #define YCOL1 10
14 struct yc2d{
15 int a;
16 int b;
17 };
18
19 #ifdef YDELO
20 //#include "YLog.h"
21 #include "assert.h"
22 int ydelon = 0;
23 int ydelom = 0;
24 //自定义类
25 ostream &operator<<(ostream &os,const yc2d &myclass){
26 return os << myclass.a << " " << myclass.b;
27 }
28 //二维数组
29 template<typename T>
30 void yPrintArr(const T x[][YCOL1]){
31 int i = 0;
32 while(1){
33 cout << i;
34 for(int j = 0;j<ydelom;j++){
35 cout << " (" << j << "," << x[i][j] << ")";
36 }
37 i++;
38 if(i >= ydelon){
39 break;
40 }
41 else{
42 cout << endl;
43 }
44 }
45 return;
46 }
47 template<typename T>
48 bool yPrint(const string &info,const T x[][YCOL1],int n = 0,int m = 0,bool clr = true){
49 if(clr){
50 system("cls");
51 }
52 cout << endl << "\\**********************" << endl << info << endl;
53 ydelon = n;
54 ydelom = m;
55 if(ydelon > 0 && ydelom > 0){
56 yPrintArr(x);
57 }
58 else{
59 return false;
60 }
61 cout << endl << "**********************\\" << endl;
62 return true;
63 }
64 //数组
65 template<typename T,int size>
66 void yPrintArr(const T (&x)[size]){
67 int i = 0;
68 while(1){
69 cout << i << " " << x[i];
70 i++;
71 if(i >= ydelon){
72 break;
73 }
74 else{
75 cout << endl;
76 }
77 }
78 return;
79 }
80 template<typename T,int size>
81 bool yPrint(const string &info,const T (&x)[size],int n = 0,bool clr = true){
82 if(clr){
83 system("cls");
84 }
85 cout << endl << "\\**********************" << endl << info << endl;
86 ydelon = n;
87 if(ydelon > 0){
88 yPrintArr(x);
89 }
90 else{
91 return false;
92 }
93 cout << endl << "**********************\\" << endl;
94 return true;
95 }
96 //非数组
97 template<typename T>
98 bool yPrint(const string &info,const T &x,int n = 0,bool clr = true){
99 if(clr){
100 system("cls");
101 }
102 cout << endl << "\\**********************" << endl << info << endl;
103 ydelon = n;
104 if(ydelon >= 0){
105 cout << x;
106 }
107 else{
108 return false;
109 }
110 cout << endl << "**********************\\" << endl;
111 return true;
112 }
113 //list & map
114 template<typename T,typename S>
115 ostream &operator<<(ostream &os,const pair<T,S> &it){
116 return os << it.first << " " << it.second;
117 }
118 template<typename T,typename S>
119 ostream &operator<<(ostream &os,const map<T,S> &st){
120 int n = ydelon==0?st.size():ydelon,i = 0;
121 os << " size=" << st.size() << " show=" << n << endl;
122 for(typename map<T,S>::const_iterator it = st.begin();it!=st.end();it++){
123 os << i << " " << *it;
124 i++;
125 if(i >= n){
126 break;
127 }
128 else{
129 os << endl;
130 }
131 }
132 return os;
133 }
134 template<typename T>
135 ostream &operator<<(ostream &os,const list<T> &st){
136 int n = ydelon==0?st.size():ydelon,i = 0;
137 os << " size=" << st.size() << " show=" << n << endl;
138 for(typename list<T>::const_iterator it = st.begin();it!=st.end();it++){
139 os << i << " " << *it;
140 i++;
141 if(i >= n){
142 break;
143 }
144 else{
145 os << endl;
146 }
147 }
148 return os;
149 }
150 #endif
151
152 int main(){
153 #ifdef YLOFI
154 freopen("yin.txt","r",stdin);
155 //freopen("yout.txt","w",stdout);
156 #endif
157 #ifdef YDELO
158 assert(1);
159 #endif
160 map<int,int> ma;
161 ma[1] = 9;
162 ma[2] = 8;
163 ma[-1] = 7;
164 list<int> li;
165 li.push_back(33);
166 li.push_back(3);
167 int a = 3;
168 double f[10] = {1.1,2.2,3.3,4.4};
169 yc2d myclass;
170 myclass.a = 3;
171 myclass.b = 2;
172 int arr2[4][YCOL1] = {{0,1,2},{2,1,0}};
173 cout << "here could be clear." << endl;
174 #ifdef YDELO
175 assert(yPrint("ma1",ma,2));
176 assert(yPrint("li",li,0,false));
177 assert(yPrint("a",a,0,false));
178 assert(yPrint("f",f,4,false));
179 assert(yPrint("myclass",myclass,0,false));
180 assert(yPrint("arr2",arr2,2,3,false));
181 #endif
182 return 0;
183 }