[英]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.