题目如下:
用模板表达 vector<vector<vector<.....<vector< T> > > > ..... > vecN
向量为任意正整数N层,每层长度不必一致,T为基本类型,请给出函数printArr(vecN)可以有序打出所有向量内容。
如有需要可以把int N 作为函数参数。
没有思路,还请指教,谢谢!
#include <iostream>
#include <vector>
template <typename T, int N>
class __Vec {
public:
using type = std::vector<typename __Vec<T, N - 1>::type>;
};
template <typename T>
class __Vec<T, 0> {
public:
using type = T;
};
template <typename T, int N>
using Vec = __Vec<T, N>::type;
template <typename T, int N>
void printArr(const Vec<T, N>& src) {
if constexpr (N == 1) {
for(T i: src) std::cout << i << ' ';
std::cout << std::endl;
}
else {
for (const Vec<T, N - 1> &i: src) {
printArr<T, N - 1>(i);
}
}
}
int main() {
Vec<int, 1> x{1, 2, 3};
printArr<int, 1>(x);
Vec<float, 2> y{{1.1, 2.1, 3.1}, {4.2, 5.2, 6.2}};
printArr<float, 2>(y);
return 0;
}
提供一个思路,仅供参考,可能有bug。
我也很好奇标解是什么。
递归?不断地进到最底的层的vector,然后打印
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void printArr(const T& vec, int div){
if(div < 1){
cerr << "the array must have at least 1 layer.\n";
exit(-1);
}
if(div == 1){
for(auto i: vec){
cout << i << ' ';
}
cout << ';';
return;
}
for(auto i : vec){
printArr(i, div-1);
cout << endl;
}
}
int main(){
int div = 4;
vector<vector<vector<vector<int> > > > vec4 = \
{{{{1,2,3,4}, {5,6,7,8}}, {{9,10,11,12}, {13,14,15,16}}}, {{{17,18,19,20},{21,22,23,24}}, {{25,26,27,28},{29,30,31,32}}}};
printArr(vec4, div);
return 0;
}
按递归尝试用auto,编译不通过,
编译器一下查到T = int,则auto不适合语境