gpt4 book ai didi

c++ - 如何在c++中打印n维数组

转载 作者:行者123 更新时间:2023-12-04 07:37:45 27 4
gpt4 key购买 nike

我想编写一个可以打印不同数组的函数。例如:

#include<iostream>
using namespace std;
int main(){
int a[10];
int b[3][2];
for(int i = 0; i < 10; i++){
a[i] = i;
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 2; j++){
b[i][j] = i * 2 + j;
}
}
print_arr(a, /*some input*/);
// output: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
print_arr(b, /*some input*/);
// output:
// 0, 1
// 2, 3
// 4, 5
return 0;
}
有人可以帮助我或说这是不可能的。
也许这个问题已经回答了。在这种情况下,请您分享该问题的链接

最佳答案

您可以创建一个函数模板来递归地解包数组。
例子:

#include <iostream>
#include <type_traits>

// only enable the function for arrays
template<class T, std::enable_if_t<std::is_array_v<T>, int> = 0>
void print_arr(const T& x) {
for(auto& in : x) {
if constexpr (std::rank_v<T> > 1) // more dimensions to go
print_arr(in); // call to unwrap next dimension
else
std::cout << in << ' '; // last dimension, print the value

}
std::cout << '\n';
}
Demo
起名 print_arr表明您不需要 SFINAE您也可以更换 enable_if_t模板的一部分带有 static_assert函数内部:
template<class T>
void print_arr(const T& x) {
static_assert(std::is_array_v<T>);
// ...
而不是直接流式传输到 std::cout ,你可以添加一个 std::ostream&参数使其流到任何流
template<class T>
void print_arr(std::ostream& os, const T& x) {
static_assert(std::is_array_v<T>);
for(auto& in : x) {
if constexpr (std::rank_v<T> > 1)
print_arr(os, in);
else
os << in << ' ';

}
os << '\n';
}

// ...

print_arr(std::cout, a);
print_arr(std::cout, b);
或者你可以让它返回 std::string完整的输出,它可以让你在之后做你想做的事情。
例子:
#include <sstream>

template<class T>
std::string print_arr(const T& x) {
static_assert(std::is_array_v<T>);
std::ostringstream os;

for(auto& in : x) {
if constexpr (std::rank_v<T> > 1)
os << print_arr(in);
else
os << in << ' ';

}
os << '\n';
return os.str();
}

// ...

std::cout << print_arr(a);
std::cout << print_arr(b);

关于c++ - 如何在c++中打印n维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67651040/

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