我想通过从流中读取单个元素来创建某种复杂类型的 vector 。我提前知道 vector 大小。是在 vector 构造函数中指定元素个数更好,还是使用 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 vector 或其他一些简单类型呢?
最佳答案
这取决于 MyElement
是什么,特别是它的 operator=
做了什么,所以它主要是通常的“尝试两者并为您使用更快的那个”。还有第三种选择,使用 c++11 和 emplace_back
,尤其是在 MyElement
很重的情况下。
作为数据点,对于 int
或 double
我发现使用构造函数(或 resize()
)和 []
更快。具体来说,通过这种方式,编译器可以更轻松地对循环进行矢量化处理。
关于c++ - 用已知数量的元素填充 vector : specify its size in constructor or by using reserve method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662386/