gpt4 book ai didi

c++ - 用已知数量的元素填充 vector : specify its size in constructor or by using reserve method?

转载 作者:可可西里 更新时间:2023-11-01 18:35:37 25 4
gpt4 key购买 nike

我想通过从流中读取单个元素来创建某种复杂类型的 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 很重的情况下。

作为数据点,对于 intdouble 我发现使用构造函数(或 resize())和 [] 更快。具体来说,通过这种方式,编译器可以更轻松地对循环进行矢量化处理。

关于c++ - 用已知数量的元素填充 vector : specify its size in constructor or by using reserve method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com