【问题标题】:C++: Vector of fixed but runtime defined length arraysC++:固定但运行时定义长度数组的向量
【发布时间】:2014-06-18 08:39:33
【问题描述】:

我知道我可以使用

std::vector<std::array<int, 20> > myVec;

作为可在一维中增长的矩阵的容器。但是std:array<> 的大小必须在编译时定义。有什么简单的方法可以对运行时定义的数组做同样的事情吗?

我需要它来处理几 GB 的数据,所以我担心向量向量会带来不必要的开销。

【问题讨论】:

  • std::vector<std::vector<int> > myVec; 适合你吗?
  • 两个尺寸都是固定的吗?如果是这样,请使用 M*N 大小的向量(或将其包装在类似矩阵的类中。)

标签: c++ arrays vector


【解决方案1】:

我需要这个来处理几 GB 的数据,所以我很害怕 向量的向量会带来不必要的开销。

然后围绕一个允许二维索引的一维vector 编写一个包装类,并将一个固定维度作为构造函数参数。

这是最有效的方式,因为只有一层间接。

【讨论】:

    【解决方案2】:

    您应该考虑使用std::vector< std::vector<int> > 来保存您的数据。过早的优化不是好事。

    如果速度太慢,您可以为vector 编写自己的内存分配器或使用第三方内存分配器。对于像您这样的特定目标(存储许多相同大小的对象),自定义内存分配器可能会更快。

    Loopunroller 在std::vector<int> 周围使用包装器的想法也很好。

    【讨论】:

    • 我同意,如果您不希望向量容纳超过设定的大小,请使用 std::vector::resize
    • 使用调整大小时要小心,因为当您请求的大小小于当前持有的向量时,它会删除元素
    • 向量的向量仅在包装类内部才有意义,因为没有什么可以保证内部向量具有相同的长度。必须以某种方式强制执行该不变量。
    • @risingDarkness 非常正确,但在这种情况下,我假设 OP 知道他想要矢量有多大。
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多