我试图将2D数组中的每个数字加倍。例如,array1
中的值将变为{2,4,6}{4,8,12}{6,12,18}
。问题是我的代码只加倍了第一个数字。有人可以给我一些关于该做什么的指示吗?
#include <iostream>
#include <iomanip>
using namespace std;
const int N = 3;
int doubleValues(int arr[][N])
{
for (int i = 0; i < N; i++)
{
arr[i][N] *= 2;
for (int j = 0; j < N; j++)
{
arr[N][j] *= 2;
return arr[i][j];
}
}
}
void showArray(int arr[][N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
cout << setw(4) << arr[i][j] << " ";
}
cout << endl;
}
}
int main()
{
int array1 [N][N] = {
{ 1, 2, 3 } ,
{ 2, 4, 6 } ,
{ 3, 6, 9 }
};
int array2 [N][N] = {
{ 3, 4, 5 } ,
{ 6, 8, 10 } ,
{ 9, 12, 15 }
};
cout << "The values for array1 doubled are: \n";
doubleValues(array1);
showArray(array1);
cout << "The values for array2 double are: \n";
doubleValues(array2);
showArray(array2);
system("pause");
}
答案 0 :(得分:2)
return arr[i][j]
函数的内部循环中有doubleValues
。在将第一个元素加倍后,您的函数将返回而不再执行任何操作。
解决方案是删除此return
语句。 (并将doubleValues
更改为void
函数,因为它不需要返回值。)
此外,您的doubleValues
函数似乎正在修改错误的元素。您对arr[i][N]
和arr[N][j]
访问元素的访问都超出了声明的数组大小的范围。您应该在循环中修改arr[i][j]
。
答案 1 :(得分:0)
如果您可以对此项目使用std::array
(因为您在编译时知道数组的大小),您可以使用<algorithm>
标题中的函数轻松实现doubleValues
函数而不用担心手写循环。
template<typename T, std::size_t size>
void doubleValues(std::array<T,size>& arr)
{
std::transform(std::begin(arr),std::end(arr),std::begin(arr), [](auto x) { return 2 * x; });
}
此方法要求您将二维阵列结构分解为单个维度,这可以相对容易地完成。例如,
std::array<int,N*N> array1 = { 1, 2, 3, 2, 4, 6, 3, 6, 9 };
std::array<int,N*N> array2 = { 3, 4, 5, 6, 8, 10, 9, 12, 15}
如果数组的大小可以动态更改,您可以将std::array
替换为std::vector
。