gpt4 book ai didi

c++ - 尝试在 cpp 中打印 n 维数组

转载 作者:行者123 更新时间:2023-12-05 09:25:52 24 4
gpt4 key购买 nike

我正在尝试使用单个函数打印 n 维数组,如果我们尝试打印的参数是 vector ,该函数会递归调用自身。否则,应该简单地打印该字符。我使用模板来传递 vector ,即 vector ,其中 T 可以是 int、float 或另一个 vector 本身。

我使用了两个辅助函数来检查传递的参数是否为 vector 。

我收到以下错误消息:

no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'})

no matching function for call to '[print](https://www.stackoverflow.com/)(__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type&)'

template constraint failure for 'template<class _Os, class _Tp>  requires (__derived_from_ios_base<_Os>) && requires(_Os& __os, const _Tp& __t) {__os << __t;} using __rvalue_stream_insertion_t = _Os&&'

判断是否为 vector 的函数:

template<class T>
bool is_vector(const std::vector<T>& x) {return true;}

template<class T>
bool is_vector(const T& x) {return false;}

打印函数:

template <class T>
void print(vector<T> vect)
{
if (!(is_vector(vect))) return;
cout << "[ ";
for( auto i = 0; i < vect.size(); i++)
{
if (is_vector(vect[i]))
{
print(vect[i]); // recursive call if vect[i] is also a vector.
}
else
{
cout << vect[i] << ' ';
}
}
cout << ']';
}

此外,我想将其用于 vector 而不是数组。

最佳答案

请不要使用using namespace std;在通用代码或非本地范围内。

代码无法编译,因为编译器必须实例化两个分支,即使它可以推断永远不会采用一个分支。由于 cout << vect[i] 没有过载什么时候vect[i]本身是一个 vector ,编译失败。

你可以使用 if constexpr但是你需要一个编译时检查 is_vector不是并标记它们 constexpr在这里无济于事。

相反,我会建议使用重载 << 的更简单变体它可以很好地处理所有已经可以打印的类型,因此不需要 if .

print然后只是这个运算符的包装器。

所有函数也使用const T&以避免复制过多。


#include <iostream>
#include <vector>

template <class T>
std::ostream& operator<<(std::ostream& o, const std::vector<T>& vec) {
o << '[';
for (std::size_t i = 0; i < vec.size(); ++i)
o << (i != 0 ? " " : "") << vec[i];
o << ']';
return o;
}

template <typename T>
void print(const T& val) {
std::cout << val;
}

int main() {
std::vector<std::vector<int>> x{{1, 2, 3}, {4, 5, 6}};

print(x);
}

输出:

[[1 2 3] [4 5 6]]

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

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