加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 04:55:59 所属栏目:百科 来源:网络整理
导读:我遇到的情况是我必须使用c样式函数来返回复制的len.我决定我应该调整大小,然后调整大小到 expand size of vector passed as memory返回 我知道resize将值设置为fillValue(总是0?).所以这将是无意义的初始化(希望每次少于mb)每秒60次.是否有办法在调整大小
我遇到的情况是我必须使用c样式函数来返回复制的len.我决定我应该调整大小,然后调整大小到 expand size of vector passed as memory返回

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

解决方法

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

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

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

更新:

约翰问:

Is the constructor really guaranteed
to zero that memory? I thought that
was undefined?

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

例如

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读