如何在c ++中处理任意维度向量?

ggr*_*grr 9 c++

我想创建一个可以在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).

当然你应该给这个函数一个更好的名字.