是在连续空间中分配的嵌套向量
are nested vector allocated in consecutive space
例如,下面的代码创建 1000000 个向量,每个向量的长度为 10。
之后,我们可以按顺序扫描矢量几次。如果第二层向量在连续空间中分配(缓存块中可能很少有第二层向量可以容纳),则以下访问是有效的。但是,如果将第 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
谢谢,是否有任何实现将它们放在一起以提高顺序扫描的性能?
vector<int>
只是一个小的控制器类,通常长三个字。实际的托管动态内存是动态分配的,因此它基本上位于随机位置。外部向量管理连续的内部向量范围,但每个内部向量管理不相关的整数范围。
如果需要连续存储,请考虑大小为 1000000 × 10 的单个vector<int>
,并大步访问它。
嵌套向量是否分配在连续空间中?
不!从内部向量分配的空间将不保证是连续的!只有向量实例本身才会出现在由外部向量管理的连续内存部分中。
相关文章:
- 选择和修改嵌套向量中的条目的最佳实践
- 嵌套向量的缺点是什么?
- 删除嵌套向量中具有remove_if的元素
- 在循环访问嵌套向量时删除元素
- C++:清除嵌套向量会导致奇怪的结果
- 类字符串和嵌套向量C
- 如何在C 中打印出嵌套向量的内容
- 使用嵌套向量动态分配方阵
- 在嵌套向量C 中获取特定元素
- C++崩溃:push_back嵌套向量
- 初始化嵌套向量的大小
- 针对大型嵌套向量的高效内存分配
- 初始化具有预留容量的嵌套向量的子向量
- 如何获取嵌套向量的尺寸(嵌套性)(不是大小)
- 如何创建一个完全动态的嵌套向量
- 是在连续空间中分配的嵌套向量
- 如何在嵌套向量中获取元素类型
- 使用具有嵌套向量的迭代器的意外行为
- 2 个对象的 STL 嵌套向量
- 嵌套c++向量的重新定位