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

前端之家收集整理的这篇文章主要介绍了c – 使用已知数量的元素填充向量:在构造函数中指定其大小或使用reserve方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想通过从流中读取单个元素来创建一些复杂类型的向量.我事先知道矢量大小.是否更好地指定向量构造函数中的元素数量或使用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或其他简单类型的向量的情况.

解决方法

这取决于MyElement是什么,特别是它的运算符=,所以它通常是“尝试两者并使用更快的一个”.还有第三种选择,使用c 11和emplace_back,特别是如果MyElement很重.

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

原文链接:https://www.f2er.com/c/119375.html

猜你在找的C&C++相关文章