std::array 的重载插入运算符

Overloading insertion operator for std::array

我正在尝试重载插入 (<<) 运算符以输出 std::array 的元素。以下会产生编译错误:

// overload operator<< to display array objects of any type T and size N
template<typename T, int N>
std::ostream &operator<<(std::ostream &Output, const std::array<T,N> &Arr) {
    for (const auto &Element: Arr)
        Output << Element << " ";
    return Output;
}

但下面的工作正常(如果我将它应用于一个数组,比方说,5 个元素):

// overload operator<< to display array objects of any type T and size 5
template<typename T>
std::ostream &operator<<(std::ostream &Output, const std::array<T,5> &Arr) {
    for (const auto &Element: Arr)
        Output << Element << " ";
    return Output;
}

我知道数组需要在编译时知道它们的大小 N,但是模板不提供吗?

当我尝试以下操作时发生错误:

std::array<int,5> MyArr {1, 2, 3, 4, 5};
std::cout << "MyArr = " << MyArr;

std::array 的第二个模板参数是 size_t,而不是 int

此外,return output; 需要 return Output;,因为 C++ 是 case-sensitive。

// overload operator<< to display array objects of any type T and size N
template<typename T, size_t N>
std::ostream &operator<<(std::ostream &Output, const std::array<T,N> &Arr) {
    for (const auto &Element: Arr)
        Output << Element << " ";
    return Output;
}