我遇到的情况是我必须使用c样式函数来返回复制的len。我决定将其调整为最大值,然后调整为返回expand size of vector passed as memory
的长度我知道resize将值设置为fillValue(总是0?)。所以这将是无意义的初始化(希望每次少于mb)每秒60次。是否有办法在调整大小时禁用启动?
答案 0 :(得分:11)
基本上没有。向量中的元素是在调整大小时默认构造的(对于整数,这会导致0)。
假设您正在使用reserve()来确保resize()不分配内存,我不会担心这个问题,除非事后证明它是一个性能问题。
如果您担心,您可能希望考虑使用常规数组并将项目计数存储在单独的变量中。这将为您提供最佳表现。
<强>更新强>
约翰问:构造函数是否真的有保证 归零那个记忆?我以为 未定义?
是和否。原始类型(int,bool,float等)确实有默认的构造函数,将它们初始化为零。但是,与常规类或结构不同,编译器不会自动调用它们。
E.g
int a; // uninitialized
int b = int(); // initialized to 0
因为vector :: resize在添加项目时使用后一种形式,所以保证创建的元素将被正确初始化为零。对于隐式创建元素的所有STL集合都是如此。