在制作用于打印矢量的 C++ 模板方面需要帮助<pair<int,int>>
Need Help In Making C++ Template For Printing Vector<pair<int,int>>
我已经创建了打印矢量图的模板,见下文
template<class T> void _print(vector<T> v1){cerr<<"[ ";for(T i:v1){_print(i);cerr<<" ";}cerr<<"]";}
但问题是我还想创建用于打印 vector> 的模板,但我不知道如何为 pair 创建新模板,它使用相同的宏 debug().
我使用的代码。
#include<bits/stdc++.h>
#define vi vector<int>
#define ui unordered_set<int>
#define all(v) v.begin(),v.end()
#define lower(s) transform(all(s) ,s.begin(),::tolower)
#define upper(s) transform(all(s),s.begin(),::toupper)
#define sortv(v) sort(all(v))
#define rev(v) reverse(all(v))
#define f first
#define s second
#define int long long int
#define float double
#define endl "\n"
#define null NULL
using namespace std;
#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x << " ";_print(x); cerr<<endl;
#else
#define debug(x)
#endif
void _print(int a){cerr<<a;}
void _print(float a){cerr<<a;}
void _print(char a){cerr<<a;}
void _print(bool a){cerr<<a;}
void _print(string a){cerr<<a;}
template<class T> void _print(set<T> s1){cerr<<"[ ";for(T i:s1){_print(i);cerr<<" ";}cerr<<"]";}
template<class T> void _print(vector<T> v1){cerr<<"[ ";for(T i:v1){_print(i);cerr<<" ";}cerr<<"]";}
int32_t main()
{
#ifndef ONLINE_JUDGE
freopen("Error.txt","w",stderr);
#endif
return 0;
}
您的问题是您没有为参数类型对重载 _print
,因此您的 T = std::pair<int,int>
模板实例化无法编译。
如果您像下面这样声明另一个函数,它应该可以工作。
void _print(const std::pair<int, int> &a) {
cerr<< "{"; _print(a.first); cerr << ", "; _print(a.second); cerr << "}";
}
我已经创建了打印矢量图的模板,见下文
template<class T> void _print(vector<T> v1){cerr<<"[ ";for(T i:v1){_print(i);cerr<<" ";}cerr<<"]";}
但问题是我还想创建用于打印 vector
我使用的代码。
#include<bits/stdc++.h>
#define vi vector<int>
#define ui unordered_set<int>
#define all(v) v.begin(),v.end()
#define lower(s) transform(all(s) ,s.begin(),::tolower)
#define upper(s) transform(all(s),s.begin(),::toupper)
#define sortv(v) sort(all(v))
#define rev(v) reverse(all(v))
#define f first
#define s second
#define int long long int
#define float double
#define endl "\n"
#define null NULL
using namespace std;
#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x << " ";_print(x); cerr<<endl;
#else
#define debug(x)
#endif
void _print(int a){cerr<<a;}
void _print(float a){cerr<<a;}
void _print(char a){cerr<<a;}
void _print(bool a){cerr<<a;}
void _print(string a){cerr<<a;}
template<class T> void _print(set<T> s1){cerr<<"[ ";for(T i:s1){_print(i);cerr<<" ";}cerr<<"]";}
template<class T> void _print(vector<T> v1){cerr<<"[ ";for(T i:v1){_print(i);cerr<<" ";}cerr<<"]";}
int32_t main()
{
#ifndef ONLINE_JUDGE
freopen("Error.txt","w",stderr);
#endif
return 0;
}
您的问题是您没有为参数类型对重载 _print
,因此您的 T = std::pair<int,int>
模板实例化无法编译。
如果您像下面这样声明另一个函数,它应该可以工作。
void _print(const std::pair<int, int> &a) {
cerr<< "{"; _print(a.first); cerr << ", "; _print(a.second); cerr << "}";
}