我正在使用一个
vector<vector<size_t>> Ar;
结构体。结构的内容随时间变化,特别是每个嵌套向量的长度是随机的并且随时间变化。顺序很重要,如果嵌套向量为空,我不能忽略它。我知道嵌套向量(比如 m)和外部向量(比如 n)的最大容量。
我在初始化正确时遇到了一些困难。如果我使用
Ar(n);
没有问题,但我最终得到了内存碎片,因为分配器不知道嵌套向量的大小。如果可能的话,我想避免这种情况,因为我不知道随着我试图处理的数据大小的增加,它会产生什么影响。我试图通过提前固定嵌套向量的长度来解决碎片以获得紧凑的表示,但我在这样做时遇到了麻烦。我用
Ar(n,vector<size_t>(m));
但这超级慢并且会大量浪费内存,因为大多数条目都不会被使用。
我已经成功地实现了这一点
vector<list<size_t> > Ar(n);
不会产生碎片,但它的运行速度比使用嵌套向量要慢得多。像 Boost::multi_array 这样的固定表示会占用太多空间,原因与上面的第二个初始化相同,并且实现起来会更加困难,因为我需要跟踪有用条目的停止位置。
有什么建议么?提前致谢。