我想创建一个可以在psudocode中处理任意维向量,函数的函数:
template<class T>
void printVector(vector<T> t){
if(T==vector){
printf("[");
for(auto it=t.begin(),it!=t.end();++it){
printVector(*it);
}
printf("]");
}else{
printf("%d ",t);
}
}
Run Code Online (Sandbox Code Playgroud)
例如:
vector<int> a;
a.push_back(12);
a.push_back(34);
printVector(a);
Run Code Online (Sandbox Code Playgroud)
输出应该是[12 34],
vector<vector<int> > b;
vector<int> b1;
b1.push_back(1);
b1.push_back(2);
b.push_back(b1);
vector<int> b2;
b2.push_back(3);
b2.push_back(4);
b.push_back(b2);
printVector(b);
Run Code Online (Sandbox Code Playgroud)
输出应为[[1 2] [3 4]]
Ada*_*dam 12
C++模板系统支持递归.你有正确的想法,但你需要重载函数:
void printVector(int t) {
printf("%d ", t);
}
template<class T>
void printVector(std::vector<T> t) {
printf("[");
for(auto v : t){
printVector(v);
}
printf("]");
}
Run Code Online (Sandbox Code Playgroud)
第一个函数处理基本情况.递归情况由第二个函数处理,应该很容易理解.
关于第二个实施例,输出所述一个[[1 2 ][3 4 ]],编译器结束了生成printVector<vector<vector<int> > >(),printVector<vector<int> >()和它所使用的叶printVector(int).
当然你应该给这个函数一个更好的名字.
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |