在调整大小时禁用矢量填充值? C++
Posted
技术标签:
【中文标题】在调整大小时禁用矢量填充值? C++【英文标题】:disable vector fill value on resize? c++ 【发布时间】:2009-03-03 19:51:41 【问题描述】:我处于必须使用返回复制的 len 的 c 样式函数的情况。我决定我应该调整到最大,然后调整到返回的长度expand size of vector passed as memory
我知道 resize 将值设置为 fillValue(总是 0?)。因此,每秒将进行 60 次毫无意义的初始化(希望每次少于 mb)。有没有办法在调整大小时禁用启动?
【问题讨论】:
对不起,我不明白你的问题 - 你能发布一些示例代码吗? 【参考方案1】:基本上没有。向量中的元素默认是在调整大小时构造的(对于整数,这会导致 0)。
假设您使用 reserve() 来确保 resize() 不会分配内存,我不会担心这一点,除非后来证明这是一个性能问题。
如果您担心,您可能希望考虑仅使用常规数组并将项目计数存储在单独的变量中。这将为您提供最佳性能。
更新:
约翰问:
构造函数真的有保障吗 将记忆归零?我以为 未定义?
是和不是。原始类型(int、bool、float 等)确实具有将它们初始化为零的默认构造函数。然而,与常规类或结构不同,编译器不会自动调用它们。
例如
int a; // uninitialized
int b = int(); // initialized to 0
因为 vector::resize 在添加项目时使用后一种形式,所以可以保证创建的元素将正确初始化为零。这适用于所有隐式创建元素的 STL 集合。
【讨论】:
构造函数真的保证将内存归零吗?我以为那是未定义的?以上是关于在调整大小时禁用矢量填充值? C++的主要内容,如果未能解决你的问题,请参考以下文章
调整列大小时 C++ Qt QTableWidget 项目移动