gpt4 book ai didi

c++ - 如何判断传入的数组是一维、二维还是N维数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:22 24 4
gpt4 key购买 nike

我想编写一个接受数组作为输入参数的函数。该函数应打印数组的所有元素。

print_array(arr)
{
//print all the elemnts of arr.
}

我不知道该怎么做。

我想首先我们需要找出传递的数组是一维还是二维还是三维等等……数组

因为,要打印以下元素:

                            1-D array, you need only 1 for loop.
2-D array, you need only 2 for loop.
3-D array, you need only 3 for loop.

但是,我不知道您将如何确定它是一维、二维还是 N 维数组。请帮忙。

最佳答案

实际上,您可以很容易地找出确切的维数,只需使用 C++11 的 std::rank 进行一次重载即可。类型特征:

#include <type_traits>
#include <iostream>

template<class T, unsigned N>
void print_dimensions(T (&)[N]){
static unsigned const dims = std::rank<T>::value + 1;
std::cout << "It's a " << dims << "-D array, you need "
<< dims << " for-loops\n";
}

但是,您实际上根本不需要 std::rank 来打印所有元素;这可以通过简单的重载轻松解决:

namespace print_array_detail{
template<class T>
void print(T const& v){ std::cout << v << " "; }
template<class T, unsigned N>
void print(T (&arr)[N]){
for(unsigned i=0; i < N; ++i)
print(arr[i]);
std::cout << "\n";
}
}

template<class T, unsigned N>
void print_array(T (&arr)[N]){ print_array_detail::print(arr); }

Live example.

关于c++ - 如何判断传入的数组是一维、二维还是N维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com