繁体   English   中英

如何在C ++中更改STL容器的大小

[英]How to change size of STL container in C++

我有一段用指针和动态内存编写的性能关键代码。 我想用STL容器重写它,但是我有点担心性能。 有没有办法在不初始化数据的情况下增加容器的大小?

例如,而不是做

ptr = new BYTE[x];

我想做类似的事情

vec.insert(vec.begin(), x, 0);

但是,这会将每个字节初始化为0。难道没有办法使向量增长吗? 我知道reserve(),但它只是分配内存,它不会改变向量的大小,并且在插入有效数据之前不允许我访问它。

谢谢大家。

vector.resize(...)可能有帮助? 您可以指定要调整大小的大小(变大或变小),还可以初始化想要将新元素初始化为的大小。

vec.resize( newsize )被定义为具有与

vec.insert( vec.end(), newsize - vec.size(), T() )

如果newsize > vec.size() …但是编译器可能难以确定它正在增长,没有缩小以及增长多少。 您可以尝试对两者进行概要分析。

如果您确定默认初始化需要花费时间,请使用自己的构造函数显式消除它。 (即使隐式构造函数很好,显示意图也很好。)

struct BYTE {
    char v;
    BYTE() {} // no default initialization!
    BYTE( char x ) : v(x) {}
    operator char&() { return v; }
    operator char const&() const { return v; }
    char *operator&() { return &v; } // not sure about operator&...
    char const *operator&() const { return &v; } // probably good in this case
};

resize()

它可能会执行也可能不会执行与insert()不同的任何操作。 值是默认构造的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM