【问题标题】:disable vector fill value on resize? c++在调整大小时禁用矢量填充值? C++
【发布时间】:2009-03-03 19:51:41
【问题描述】:

我处于必须使用返回复制的 len 的 c 样式函数的情况。我决定我应该调整到最大,然后调整到返回的长度expand size of vector passed as memory

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

【问题讨论】:

  • 对不起,我不明白你的问题 - 你能发布一些示例代码吗?

标签: c++ vector


【解决方案1】:

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

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

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

更新:

约翰问:

构造函数真的有保障吗 将记忆归零?我以为 未定义?

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

例如

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

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

【讨论】:

  • 构造函数真的保证将内存归零吗?我以为那是未定义的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多