EverNoob 2021-04-02 10:53 采纳率: 75%
浏览 40
已采纳

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

题目如下:

用模板表达 vector<vector<vector<.....<vector< T> > > > ..... > vecN

向量为任意正整数N层,每层长度不必一致,T为基本类型,请给出函数printArr(vecN)可以有序打出所有向量内容。

如有需要可以把int N 作为函数参数。

 

没有思路,还请指教,谢谢!

  • 写回答

3条回答 默认 最新

  • include_iostream_ 2021-04-02 11:30
    关注
    #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。

    我也很好奇标解是什么。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?