gpt4 book ai didi

c++ - 是在连续空间中分配的嵌套 vector

转载 作者:行者123 更新时间:2023-11-28 00:38:54 25 4
gpt4 key购买 nike

例如,下面的代码创建了 1000000 个 vector ,每个 vector 的长度都是 10。

之后我们可能会依次扫描 vector 数次。如果第 2 层 vector 分配在连续的空间中(可能很少有第 2 层 vector 可以放入缓存 block ),则以下访问是有效的。但是,如果第 2 层 vector 分配在不同的地方,每次我们离开内层循环时,我们可能会跳到一个随机的地方去获取数据,效率很低。

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层 vector 首先分配在连续空间中。在我们将元素 push_back 放入 vector 后,由于缺乏空间将它们原地扩展,它们可能会被移动到其他空间。他们还会留在附近吗?

谢谢。

编辑1

谢谢,是否有任何实现将它们放在一起以提高顺序扫描的性能?

最佳答案

vector<int>只是一个小的 Controller 类,通常三个字长。实际托管的动态内存是动态分配的,因此它基本上位于随机位置。您的外部 vector 管理一个连续的内部 vector 范围,但每个内部 vector 管理一个不相关的整数范围。

如果您想要连续存储,请考虑单个 vector<int>大小为 1000000 × 10 并大步访问它。

关于c++ - 是在连续空间中分配的嵌套 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19842953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com