使用已知数量的元素填充向量:在构造函数中指定其大小或使用reserve方法指定它?

时间:2015-11-12 00:25:13

标签: c++ vector std

我想通过从流中读取单个元素来创建一些复杂类型的向量。我事先知道矢量大小。是否更好地指定向量构造函数中的元素数量或使用reserve方法?这两个中哪一个更好?

int myElementCount = stream.ReadInt();
vector<MyElement> myVector(myElementCount);
for (int i = 0; i < myElementCount; i++)
{
    myVector[i] = stream.ReadMyElement();
}

int myElementCount = stream.ReadInt();
vector<MyElement> myVector;
myVector.reserve(myElementCount);
for (int i = 0; i < myElementCount; i++)
{
    myVector.push_back(stream.ReadMyElement());
}

我只是创建一个int或其他简单类型的向量的情况。

1 个答案:

答案 0 :(得分:6)

这取决于MyElement是什么,特别是它operator=的作用,所以它通常是&#34;尝试两者并使用更快的一个&#34;。还有第三种选择,使用c ++ 11和emplace_back,尤其是MyElement很重的时候。

作为数据点,对于intdouble,我发现使用构造函数(或resize())和[]的速度更快。具体来说,这样循环对编译器来说更容易进行矢量化。