std::vector.resize的性能问题
代码如下:vector<char> v;
我为了快速的load数据到v当中,于是:
v.reserve(1024 * 1024 * 100);
v.resize(1024 * 1024 * 100);
可是,resize操作需要做构造操作,在我的机器上,上一句大概需要150ms,太慢了。
但是我需要resize之后,我才可以安全的通过&v[0]往里面塞大量数据。
因为item类型是char,根本不需要构造,于是,我重载了allocator:
struct myAlloc : public allocator<char>
{
//覆盖construct和destory,函数体为空,期望inline优化掉。
};
vector<char, myAlloc> v;
编译行参数/DNDEBUG /GX /O2 /Og /Ob2
结果平均只快了10ms左右。我不知道为什么,预想的构造循环没有被优化掉,也许,是vc7.1的stl代码的问题?我很郁闷!
理论上,我reserve之后,只要修改v内部的size数据就可以了,但那个纯属hack,而且不可移植。
有没有办法快速的resize呢?或者,达到快速向vector里面放数据的目的呢?
相关推荐
C++实现StringBuilder的例子
用C++实现类似StringBuilder的例子,非常高效,速度快,代码容易理解,使用方便
C++编写大整数加减法,乘法
C语言编写 visual C++ 下调试通过
C++ vector::resize解析[可运行源码]
本文详细解析了C++中std::vector::resize()方法的语法和用法。resize()方法用于调整容器的大小,使其包含指定数量的元素。如果新大小小于当前大小,多余元素会被删除;如果新大小大于当前大小,会通过插入元素来扩展容器。插入的元素可以指定初始值,否则会进行值初始化。文章通过示例代码展示了resize()方法在不同情况下的行为,包括减小数组长度、增大数组长度并指定填充元素、增大数组长度但不指定填充元素等。示例代码的运行结果直观地展示了resize()方法的效果。此外,文章还推荐了一个在线运行C++代码的网站。
C++ resize()详解[代码]
本文详细介绍了C++中std::vector的resize()成员函数的使用方法。resize()函数用于调整vector的大小,可以增加或减少元素数量。文章首先介绍了resize()的两种语法形式,分别用于默认初始化和指定值初始化新元素。接着,通过代码示例展示了resize()在增加和减少vector大小时的具体应用。此外,文章还指出了使用resize()时的注意事项,如不会改变vector的容量、可能导致资源重新分配等。最后,通过完整的代码示例进一步说明了resize()的实际应用场景。
std vector用法详解
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。


工具平台和程序库
