【问题标题】:How to declare an array over two dimensions with smart pointers? [duplicate]如何使用智能指针声明二维数组? [复制]
【发布时间】:2018-05-16 04:54:54
【问题描述】:
unique_ptr<int> ptr1(new int {});
unique_ptr<int[]> ptr2(new int[5] {});

单维和一维数组可以像上面那样声明。如何将二维或更多数组声明为智能指针?

const size_t idx = 5;
// 2D
int** ptr3 = new int*[idx]{};
for (size_t i = 0; i < idx; i++)
{
    ptr3[i] = new int[idx]{};
}
for (size_t i = 0; i < idx; i++)
{
    delete[] ptr3[i];
}
delete[] ptr3;


// 3D
int*** ptr4 = new int**[idx]{};
for (size_t i = 0; i < idx; i++)
{
    ptr4[i] = new int*[idx]{};
    for (size_t j = 0; j < idx; j++)
    {
        ptr4[i][j] = new int[idx]{};
    }
}
... skip ...

-----> smart pointer version?

【问题讨论】:

  • 不要那样做。使用容器。也许找到一个实现一些Matrix 模板容器的库(或实现它)。请注意,C++ 没有二维数组(而是数组的数组)。然后使用一个智能指针指向一些Matrix,或者(如果需要)一个Matrix 的智能指针。
  • vector&lt;vector&lt;int&gt;&gt; 有什么问题?
  • 我只是对上述情况下的智能指针语法感到好奇。反正这种方式不好。

标签: c++ arrays smart-pointers


【解决方案1】:

这可能是您正在寻找的,但我认为它不实用。您可以改用向量的向量,也可以使用其他可以处理多维数组的结构或库。

int main()
{
    unique_ptr<unique_ptr<int[]>[]> ptr(new unique_ptr<int[]>[5] {});

    for (int i = 0; i < 5; i++)
    {
        unique_ptr<int[]> temp_ptr(new int[5]);
        for (int j = 0; j < 5; j++)
            temp_ptr[j] = i*5 + j;
        ptr[i] = move(temp_ptr);
    }


     for (int i = 0; i < 5; i++)
     {
         for (int j = 0; j < 5; j++)
            cout << ptr[i][j] << " ";
        cout << "\n";
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2019-03-17
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    相关资源
    最近更新 更多