c++:如何用模板写n层向量(字节面试题复盘)?

题目如下:

用模板表达 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不适合语境