gpt4 book ai didi

c++ - 重载运算符<<用于查找二维数组的总和

转载 作者:行者123 更新时间:2023-12-01 14:14:57 27 4
gpt4 key购买 nike

我正在用 C++ 做一些练习题。我遇到了一个问题,我想找到一个二维数组的元素总和。我可以编写一个返回总和的 get sum 方法。但我正在探索是否可以重载“operator<<”方法以达到相同的结果。

#include <iostream>
using namespace std;

int operator<<(const int arr[5][5])
{
int sum = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
sum += arr[i][j];
}
}
return sum;
}

int main()
{
int arr[5][5] = { {1,2,3,4,5},
{2,3,4,5,6},
{3,4,5,6,7},
{4,5,6,7,8},
{5,6,7,8,9} };
cout << &arr << endl;
}
我想达到 std::cout 中的总和方法。这可能吗?

最佳答案

您可以通过为 operator<< 提供模板重载来获得所需的输出。 ,这需要 const& int[row][col]如下。
这仅适用于 int[row][col] .
( See Live Online )

#include <iostream>
#include <numeric> // std::accumulate

template<std::size_t M, std::size_t N>
std::ostream& operator<<(std::ostream& out, const int (&arr)[M][N]) /* noexcept */
{
int sum = 0;
for (std::size_t i = 0; i < M; ++i)
{
#if false // either using `std::accumulate`
sum += std::accumulate(arr[i], arr[i] + N, 0);

#elif true // or using for- loop
for (std::size_t j = 0; j < N; j++)
sum += arr[i][j];
#endif
}
return out << sum;
}

附注 :
  • 但是,您正在更改“operator<<”重载的行为。它
    假设打印元素(即数组)而不是打印总和
    要素。
  • 还要避免练习 using namespace std; .
  • 关于c++ - 重载运算符<<用于查找二维数组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62911324/

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