在调整大小时禁用向量填充值? C ++

时间:2009-03-03 19:51:41

标签: c++ vector

我遇到的情况是我必须使用c样式函数来返回复制的len。我决定将其调整为最大值,然后调整为返回expand size of vector passed as memory

的长度

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

1 个答案:

答案 0 :(得分:11)

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

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

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

<强>更新

约翰问:

  

构造函数是否真的有保证   归零那个记忆?我以为   未定义?

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

E.g

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

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