在我正在做的一些工作中,我多次遇到过这个问题模式,我想知道是否存在已知的解决方案。
这很简单:我有一个元素向量,它们又是一些动态大小的向量。我知道内部向量的大小将相对较小(即,在平均情况下大约为10s的项目),但会有很多。
我可以天真地解决这个问题:
vector<vector<item>> vss;
使用这种方法,内部向量中的内存分配将遍布整个地方。迭代vss
中的所有元素将是一个混乱的缓存,这可能会导致我的性能问题。
我认为这可以通过使用某种链接列表结构来解决,该列表结构在同一块内存中具有多个头。
假设无法预先确定内部向量的大小,是否有办法构造和填充vss
,以便迭代元素不会成为缓存灾难?
谢谢。
答案 0 :(得分:0)
我只想添加我当前的,但希望是暂时的解决方案。我没有直接填充vss
,而是使用临时的矢量对象:
vector<pair<size_t, item>> temporaries;
,表示应在特定索引处插入某个项目。从这里我计算每个索引的条目数,分配一个内存块来保存项目,并移动数据。一些额外的向量用于记账(即每个索引的项目数量及其起始位置)。