我想通过从流中读取单个元素来创建一些复杂类型的向量.我事先知道矢量大小.是否更好地指定向量构造函数中的元素数量或使用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())和[]更快.具体来说,这样循环对编译器更容易进行矢量化.