C++中的三维数组

3 Dimensional Array in C++

本文关键字:数组 三维 C++      更新时间:2023-10-16

我正在实现一个三维数组。很像Excel文档中的单元格和表格。x和y是页面大小,z是纸张数量。目前,每个页面的x和y索引可以是相同的。

我想用向量来处理这个问题(现在只说字符串),但声明如下:

std::vector<std::string> sheets;
//x and y being the x-y coordinates and z being the number of pages.
int size = x*y*z;
sheets.reserve(size);

因此,给了我一块很好的连续内存(就像std::vector的定义一样),它既快速又高效。

我的问题是:有没有一种方法可以用std::array实现这一点?有没有一种方法可以在创建对象时创建数组大小,或者必须在编译时知道?

class sheetsObj
{
    int x, y, z;
    int size;
    //Where size is x * y * z.
    std::array<std::string, size> sheets;
public:
   sheetsObj(int xInd, int yInd, int zInd) : x{ xInd }, y{ yInd }, z{ zInd } {};
   ....
}

提前谢谢。

最好的经验法则是尽可能使用std::vector,必要时使用std::array。在这种情况下,std::vector是您的最佳选择。正如您所说,std::array的大小必须在编译时已知,所以如果您需要动态大小的存储,这是一件很容易的事情。

std::array的大小由模板参数固定,因此在编译时进行评估,可能不适合您的需求(除非所有图纸都设计为永远具有相同的大小?)。

std::vector将完全满足您的要求,因为程序不使用调整大小的开销,并且您将根据需要获得内存块。

std::dynarray可能是最适合您使用的类,因为它表示一个可在运行时初始化的数组,在其生命周期内保持固定大小。然而,最初计划与C++14标准一起发布,投票决定将其排除在即将发布的标准之外,留待稍后在单独的技术规范中提出。