C++中的三维数组
3 Dimensional Array in C++
我正在实现一个三维数组。很像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标准一起发布,投票决定将其排除在即将发布的标准之外,留待稍后在单独的技术规范中提出。
相关文章:
- 多维数组存储三种不同的数据类型?
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 三维数组中的C/C++DWORD到BYTE和BYTE到DWORD的转换
- std::将三维数组复制到三维向量中
- 显示结构的三维数组
- 如何将X 2维数组连接到一个三维阵列中
- 使用unique_ptr来管理三维数组
- 无法访问三维数组中的特定位置
- 内存相关崩溃:Cocos2d游戏中的三维数组
- 如何在三维数组中使用std::map来存储/检索具有特定值的键
- 使用参数在C++中实例化三维数组
- 三维数组作为数组的向量
- 用C++将三维数组转换为二维数组
- C/C++ 三维数组如何在内存中存储,以及遍历它的最快方法是什么
- 三维数组c++中的访问冲突(使用malloc)
- 二维数组:二维数组的子平方的元素之和
- 用变量作为C++中二维数组的维数的问题
- 读取数组2维的另一种方式c++
- 有四个括号的数组的维数是多少?
- 在c++中实现多维数组奇维的最佳方法