c++ - 在 C++ 中将一维数组转换为二维数组

标签 c++ arrays multidimensional-array casting

我需要创建一个具有动态分配内存的二维数组(两个维度都将在运行时设置),但出于效率目的,我想创建一个具有连续分配内存的一维版本,但又不知何故想要将其用作二维数组。有没有办法使用类型转换来实现这一点。 我要实现的用法如下,显然行不通。 最好的,

int size = 4;
int* arr = new int[size];
arr[0] = 10;
arr[1] = 11;
arr[2] = 12;
arr[3] = 13;
cout << (int[][2])arr[1][1] << endl;

最佳答案

虽然我认为 Codor 的解决方案最符合 C++ 的编码风格,但我想分享我用 C 风格完成的解决方案。

#include <iostream>

typedef int (*pint2)[2]; //pint2 is a pointer to an array of 2 ints

int main()
{
    int arr[4] = { 0, 1, 2, 3 };
    pint2 parr = (pint2)arr;
    std::cout << parr[0][0] << std::endl;
    std::cout << parr[0][1] << std::endl;
    std::cout << parr[1][0] << std::endl;
    std::cout << parr[1][1] << std::endl;

    getchar();
    return 0;
}

希望对您有所帮助! (或者至少你发现这很有趣:/)

编辑:对于可变长度的数组!

#include <iostream>

int main()
{
    int arr[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    const int sizeofarr = sizeof(arr)/sizeof(arr[0]); //Number of elements in array

    {
        const int numofrows = 2; //Number of rows
        const int numofcolumns = sizeofarr/numofrows; //Number of columns
        typedef int (*pinta)[sizeofarr/numofrows]; //A 2D array of columns of 2

        pinta parr = (pinta)arr;
        for(int i = 0; i < numofrows; ++i)
            for(int j = 0; j < numofcolumns; ++j)
                std::cout << parr[i][j] << std::endl;
    }

    {
        const int numofrows = 3; //Number of rows
        const int numofcolumns = sizeofarr/numofrows; //Number of columns
        typedef int (*pinta)[sizeofarr/numofrows]; //A 2D array of columns of 3

        pinta parr = (pinta)arr;
        for(int i = 0; i < numofrows; ++i)
            for(int j = 0; j < numofcolumns; ++j)
                std::cout << parr[i][j] << std::endl;
    }

    getchar();
    return 0;
}

关于c++ - 在 C++ 中将一维数组转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503461/

相关文章:

java - 可以从一个文件创建两个不同大小的数组/矩阵吗?

另一个命名空间中函数的 C++ ADL

javascript - 为什么我的带功能箭头的 map() 不起作用?

java - 在每个循环中,我想在最后一次迭代中跳过 ", "

java - 为 Math.Random 创建武器数组以供选择

c - 使用指针从多维数组中获取值 - C

c++ - 链接器错误 2001 未解析的外部符号

c++ - 动态指向现有或创建新对象

c++ - 如何获取 GDI 句柄列表

java - 在数组列表上使用分隔符