结构中的向量耗时吗?使用指针更好吗?

时间:2017-10-17 11:33:25

标签: c++ pointers struct

我在C ++中有一个像这样的结构:

struct MyStruct 
{
    someType v1;
    someType2 v2;    
    someType3 v3;
    someType4 f1();

    std::vector<someType> myVector;
} ;

它经常用于这样的形式:

 //some process... after which a std::vector<someType> vec1 is generated 
 MyStruct myStruct;    
 myStruct.myVector = vec1;

因为vec1相对较大。我想通过执行作业myStruct.myVector = vec1;

来了解它是否花费了很多时间

我应该在MyStruct中使用指向myVector的指针来加快速度吗?如何?

2 个答案:

答案 0 :(得分:11)

  

因为vec1相对较大。我想通过分配来了解它是否花费了很多时间

它花费的时间与矢量的大小成线性比例。

  

我应该在MyStruct中使用指向vec的指针来加快速度吗?

鉴于您所描述的问题,除非您遗漏了相关细节,否则我不会建议您使用指针。

您可以移动分配向量(自C ++ 11以来),或交换它(在C ++ 11之前)。但是,假设你不需要vec1来做任何事情。

答案 1 :(得分:2)

std::vector<someType> myVectorstd::vector<someType*> myVector之间存在根本区别。非指针版本实际拥有并存储数据。这意味着一旦完成赋值,对原始变量的更改将不会导致向量的更改(深层复制)。

在指针版本中,存储位于向量的外部。这意味着对原始文件的更改将导致向量更改(浅副本)。这也是另一种效应。

由于存储位于矢量的外部,因此您有责任确保原始数据的存储时间长于矢量。否则会发生坏事。这可以通过std::shared_ptr来缓解,但您仍然会使相同的内存别名。

所以你需要问的问题是你需要浅拷贝还是深拷贝。

如果数据存储在std::move外部(如stl-container),struct只会保存副本,否则您需要移动std::unique_ptr<someType>以保存副本