在调整大小时禁用矢量填充值? 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++ 中动态调整数组的大小

调整对象矢量大小时出错

调整列大小时 C++ Qt QTableWidget 项目移动

矢量调整大小 - 检测的便携方式

调整 UIWebView 框架大小时如何禁用 UIWebView 调整内容大小

在窗口调整大小时禁用 jquery 函数