7

我处于必须使用 ac 样式函数返回复制的 len 的情况。我决定我应该调整到最大值,然后调整到返回的长度展开作为内存传递的向量的大小

我知道 resize 将值设置为 fillValue (总是 0?)。因此,每秒进行 60 次毫无意义的初始化(希望每次少于 mb)。有没有办法在调整大小时禁用启动?

4

1 回答 1

11

基本上没有。向量中的元素默认是在调整大小时构造的(对于整数,这会导致 0)。

假设您使用 reserve() 来确保 resize() 不会分配内存,我不会担心这一点,除非后来证明这是一个性能问题。

如果您担心,您可能希望考虑仅使用常规数组并将项目计数存储在单独的变量中。这将为您提供最佳性能。

更新:

约翰问:

构造函数真的保证将内存归零吗?我以为那是未定义的?

是和不是。原始类型(int、bool、float 等)确实具有将它们初始化为零的默认构造函数。然而,与常规类或结构不同,编译器不会自动调用它们。

例如

int a;         // uninitialized
int b = int(); // initialized to 0

因为 vector::resize 在添加项目时使用后一种形式,所以可以保证创建的元素将正确初始化为零。这适用于所有隐式创建元素的 STL 集合。

于 2009-03-03T19:59:17.883 回答