繁体   English   中英

在课堂上传递矢量而不复制

[英]Passing vector in class without copying

我上课了:

someclass标题代码:

class SomeClass{
    SomeClass();
    vector<int> somePointerVector;

    public:
    SomeClass(vector<int> &someVector);
};

我对这里如何使用矢量有点困惑。 我想设置somePointerVector = someVector,这样我就可以使用somePointerVector操作someVector中的数据与类的其他部分,我也不想复制所有someVectors数据。

使用数组我会用:

int* somePointerArray = someArray;

但是我如何用向量做到这一点?

somePointerVector作为引用并将其放在类的初始化列表中。 (请给它一个更好的名字。)

class SomeClass
{
    vector<int> &somePointerVector;

  public:
    SomeClass(vector<int> &someVector)
      : somePointerVector(someVector)
    {}
};

要了解最合适的解决方案,您需要了解“SomeClass”的生命周期和所有权以及它传递的向量。 例如,如果SomeClass通过引用获取向量,那么构造SomeClass的代码需要确保向量的生命周期大于SomeClass的生命周期 - 否则SomeClass可能会以不再有效的引用结束。 通过引用传递,SomeClass不是“取得所有权”的向量

或者,如果构造SomeClass的代码想要“切换”向量的责任(并且您有一个编译器和STL实现'r-value reference aware'),那么您可以将r值引用传递给向量;

class SomeClass { 
    vector<int> data_;

 public:
    SomeClass(vector<int>&& data) : data_(data) 
} 

然后构造SomeClass的代码;

vector<int> data;
data.push_back(1);
data.push_back(2);
data.push_back(3);
data.push_back(4);

SomeClass someClass(std::move(data));

在这种情况下,您已经将向量“移动”到SomeClass中以避免复制,而SomeClass已经“获取”了“数据”的所有权。

怎么样

class SomeClass {
    vector<int> myVector;

    void MyMethod(vector<int>* theVector);
}

并在你的方法

void SomeClass::MyMethod(vector<int>* theVector)
{
    theVector->push_back(7);
}

自从我与STL合作以来已经很久了,但我认为这是推回?

哦,并使用指数你可以(* theVector)[2] ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM