如何处理矢量属性的矢量
How to handle vector of vector attribute?
在一个名为ClassA的c++类中,我先前有另一个名为ClassB的类的二维数组类型的属性:
私人:ClassB矩阵[行][关口];
where ROWS and COLS where静态值
我现在正在修改应用程序,以便能够在命令行上指定两个维度。我正在考虑使用vector<vector<ClassB>>
代替。在使用此解决方案之前,我想知道在默认情况下如何初始化这样的对象。vector
属性是自动分配的,但是嵌套向量会发生什么?我应该自己分配吗?
注意:我没有找到这个问题的答案,所以如果是重复的,请告诉我。
std::vector<std::vector>
的默认构造函数将构造向量的向量,但绝对不会为其元素分配内存(在本例中为内部向量),除非您明确地这样说。如果您需要分配与ROWS x COLS
对应的内存,请使用
std::vector<std::vector<int>> vec(ROWS, std::vector<int>(COLS));
如果你只写
std::vector<std::vector<int>> vec(ROWS);
则外部向量的ROWS
元素将是默认构造的,因此不会为内部向量分配内存,您必须手动保留每个或push_back
元素到它们中。
std::vector
的构造函数定义在这里。
但一般来说,使用嵌套向量是一个坏主意,因为你失去了数据的局部性,代码可能会变慢。换句话说,不能保证数据在内存中是连续的。vector<vector>
在内部将数据存储为指针数组,虽然指针是连续存储的,但它们指向的每个数据块并不保证在内存中相邻。最好使用"flatten"矢量,从2D转换为1D,反之亦然。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 使用QT的C 处理DOM处理后的XML属性顺序
- C++设计中的属性处理
- 从 C++ 中的 POSIX 信号处理程序获取对象属性
- 在c++中处理类的动态属性
- QML如何对属性的每次更改进行动画处理?(只有最后一个更改动画可见)
- 从属性页的事件处理程序调用DoModal()不会弹出对话框
- 如何处理矢量属性的矢量
- 移动构造函数:如何处理容器属性
- 如何获得RapidJSON模式来处理默认属性
- 有没有其他简单的方法来处理c++属性?
- 从属性表页的处理程序引发的异常
- 如何处理初始化类的大量属性