我上课了:
someclass标题代码:
class SomeClass{
SomeClass();
vector<int> somePointerVector;
public:
SomeClass(vector<int> &someVector);
};
我对如何在这里使用向量感到有点困惑。我想设置somePointerVector = someVector,这样我就可以使用somePointerVector操作someVector中的数据与类的其他部分,我也不想复制所有someVectors数据。
使用数组我会用:
int* somePointerArray = someArray;
但是我怎么用矢量呢?
答案 0 :(得分:4)
将somePointerVector
作为参考,并将其放入班级的initialization list。 (请给它一个更好的名字。)
class SomeClass
{
vector<int> &somePointerVector;
public:
SomeClass(vector<int> &someVector)
: somePointerVector(someVector)
{}
};
答案 1 :(得分:2)
要了解最合适的解决方案,您需要了解“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已经“取得了对'数据'的所有权。”
答案 2 :(得分:0)
怎么样
class SomeClass {
vector<int> myVector;
void MyMethod(vector<int>* theVector);
}
并在您的方法中
void SomeClass::MyMethod(vector<int>* theVector)
{
theVector->push_back(7);
}
自从我使用STL以来已经很久了,但我认为它是推送式的?
哦,使用指数你可以(* theVector)[2] ......