【发布时间】:2010-04-20 16:47:37
【问题描述】:
我有一段用指针和动态内存编写的性能关键代码。 我想用 STL 容器重写它,但我有点担心性能。有没有办法在不初始化数据的情况下增加容器的大小?
例如,而不是做
ptr = new BYTE[x];
我想做类似的事情
vec.insert(vec.begin(), x, 0);
但是,这会将每个字节初始化为 0。难道没有办法让向量增长吗? 我知道reserve(),但它只是分配内存,它不会改变向量的大小,并且在我插入有效数据之前不允许我访问它。
谢谢大家。
【问题讨论】:
-
为什么要访问不包含有效数据的东西?
-
你不应该关心这个。
std::vector是一个通用数组。如果您需要原始速度,那么它不是为此而设计的(尽管对于我使用过的任何东西来说已经足够快了)。您应该烹饪自己的容器,然后不要无用地初始化项目。 -
我必须将缓冲区传递给 API,它会告诉我需要多少空间。因此,在普通的旧 C 中,简化一点是: sz = GetSizeNeeded(); buf = malloc(sz); GetBuffer(buf);
-
谢谢约翰内斯。我只是想确定我没有重新发明轮子。
标签: c++ memory stl containers