我想通过从流中读取单个元素来创建一些复杂类型的向量。我事先知道矢量大小。是否更好地指定向量构造函数中的元素数量或使用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或其他简单类型的向量的情况。
答案 0 :(得分:6)
这取决于MyElement
是什么,特别是它operator=
的作用,所以它通常是&#34;尝试两者并使用更快的一个&#34;。还有第三种选择,使用c ++ 11和emplace_back
,尤其是MyElement
很重的时候。
作为数据点,对于int
或double
,我发现使用构造函数(或resize()
)和[]
的速度更快。具体来说,这样循环对编译器来说更容易进行矢量化。