如何在2d数组中加倍值? C ++

时间:2015-06-08 21:02:49

标签: c++ multidimensional-array

我试图将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");
}

2 个答案:

答案 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