使用大型数据集初始化类成员向量的最有效方法
Most efficient way to initialize class member vector with large data set
使用类中的std::vector
成员变量的数据初始化的最快/内存效率方法是什么?
这是我能够想到的:
class LargeClass
{
//lot of data, with long running constructor to initialize them
}
class EngineClass
{
public:
EngineClass( const vector<LargeClass>& vectorOfLargeClass )
{
mVectorOfLargeClass = vectorOfLargeClass; //Here is what I was able to come up
}
private:
vector<LargeClass> mVectorOfLargeClass;
}
int main()
{
vector<LargeClass> vectorOfLargeClass;
...
//fill vectorOfLargeClass with a lot of data
...
EngineClass engine( vectorOfLargeClass );
...
}
我需要EngineClass
保存main()
中创建的vectorOfLargeClass
向量的数据副本。
我使用C++11,但我并不完全熟悉该语言,也许有更好更标准的方式来完成此类任务。
添加移动构造函数:
EngineClass( vector<LargeClass>&& vectorOfLargeClass ) :
mVectorOfLargeClass(std::move(vectorOfLargeClass))
{
}
然后按如下方式使用它:
EngineClass engine( std::move(vectorOfLargeClass) );
但这假设vectorOfLargeClass
在std::move
之后不再需要main
你可以
这样做:
class EngineClass
{
public:
EngineClass(vector<LargeClass> vectorOfLargeClass) :
mVectorOfLargeClass(std::move(vectorOfLargeClass) {}
private:
vector<LargeClass> mVectorOfLargeClass;
};
因此,您可以移动或复制矢量:
EngineClass engine( vectorOfLargeClass ); // copy
EngineClass engine(std::move(vectorOfLargeClass)); // move
一种稍微快一点的方法是使用构造函数的初始值设定项列表来初始化成员变量:
EngineClass( const vector<LargeClass>& vectorOfLargeClass )
: mVectorOfLargeClass(vectorOfLargeClass)
{
}
通常,更喜欢在构造函数的初始值设定项列表中初始化成员变量。
如果您不想复制输入向量,而是在成员向量中传输其元素std::vector::swap
您可以使用超快的成员函数,因为它等效于指针交换,在向量之间交换缓冲区:
EngineClass( vector<LargeClass>& vectorOfLargeClass )
{
mVectorOfLargeClass.swap(vectorOfLargeClass);
}
相关文章:
- 在C++中初始化向量映射的最有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- C++有效地找到向量中第一个最接近的匹配值?
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 检查两个向量是否并行的最有效方法
- 当表示为对象的一维向量时,有效地旋转 NxM 矩阵 (C++)
- 如何有效地实现将向量的数据分配给多个变量?
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 如何在C++中有效地将数组移动到向量
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 如何有效地用第二个值对向量对进行分组
- 从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?
- 如何在 CUDA 中(有效地)将大量向量相互比较
- 基于整数向量执行位排列的有效方法?
- 如何使用C++有效地合并排序与向量
- C++:检查向量中的元素是否大于另一个具有相同索引的元素的有效方法?
- 如何有效地规范化向量C++
- remove_if然后擦除对向量有效吗
- 将一个STL向量有效地分配给另一个STL矢量(WSL问题)
- c++向量有效地添加元素