我处于必须使用 ac 样式函数返回复制的 len 的情况。我决定我应该调整到最大值,然后调整到返回的长度展开作为内存传递的向量的大小
我知道 resize 将值设置为 fillValue (总是 0?)。因此,每秒进行 60 次毫无意义的初始化(希望每次少于 mb)。有没有办法在调整大小时禁用启动?
我处于必须使用 ac 样式函数返回复制的 len 的情况。我决定我应该调整到最大值,然后调整到返回的长度展开作为内存传递的向量的大小
我知道 resize 将值设置为 fillValue (总是 0?)。因此,每秒进行 60 次毫无意义的初始化(希望每次少于 mb)。有没有办法在调整大小时禁用启动?
基本上没有。向量中的元素默认是在调整大小时构造的(对于整数,这会导致 0)。
假设您使用 reserve() 来确保 resize() 不会分配内存,我不会担心这一点,除非后来证明这是一个性能问题。
如果您担心,您可能希望考虑仅使用常规数组并将项目计数存储在单独的变量中。这将为您提供最佳性能。
更新:
约翰问:
构造函数真的保证将内存归零吗?我以为那是未定义的?
是和不是。原始类型(int、bool、float 等)确实具有将它们初始化为零的默认构造函数。然而,与常规类或结构不同,编译器不会自动调用它们。
例如
int a; // uninitialized
int b = int(); // initialized to 0
因为 vector::resize 在添加项目时使用后一种形式,所以可以保证创建的元素将正确初始化为零。这适用于所有隐式创建元素的 STL 集合。