例如,以下代码创建 1000000 个向量,每个向量的长度为 10。
之后,我们可能会依次扫描向量几次。如果第 2 层向量被分配在连续空间中(可能很少有第 2 层向量可以放入缓存块中),则以下访问是有效的。但是,如果将第 2 层向量分配在不同的地方,每次离开内循环时,我们可能会跳转到随机的地方来获取数据,这样效率不高。
vector<vector<int > > a(1000000 , vector<int>(10))
for (int i = 0; i < a.size(); i++)
{
for (int j = 0; j< a[i].size() ; j++) {
a[i][j]++;
}
}
此外,如果第 2 层向量首先分配在连续空间中。在我们 push_back 元素到向量中之后,它们可能会由于缺乏空间来原地扩展它们而被移动到其他空间。他们还会被关在附近吗?
谢谢你。
编辑1
谢谢,是否有任何实现将它们组合在一起以提高顺序扫描的性能?