在下面的代码中,我想要 vector v
设置为 vector in
没有它的内容被复制,但我不能使用像 vector<int> &v = in
这样的引用因为 v 已经被声明了。我应该进行哪些更改以防止复制?
class pt
{
private:
vector<int> v;
int size;
public:
void construct(int n)
{
for (int i = n - 1; i >= 0; --i)
{
v[i] = v[i - 1] + v[i - 2];
}
}
pt(vector<int>& in, bool no_Copy = false)
{
if (no_Copy)
{
&v = in; //I want to fix this
}
else {}
construct(in.size());
}
//other functions which use `v`
};
最佳答案
有点像
vector<int> v;
不能从别名“切换”为别名。
你可以让它始终是一个别名,在一种情况下它指代传递的 in
vector ,在另一种情况下指代 in
vector 的拷贝。
例如:
class pt
{
private:
vector<int>& v;
vector<int> v_copy;
...
pt(vector<int>& in, bool no_Copy = false)
: v(no_Copy ? in : v_copy)
{
if(!no_Copy) v_copy = in;
}
或者您也可以从 in
移动,正如@Carl 在评论中建议的那样。这很快,但会破坏 in
vector 。
关于c++ - 将一个预先声明但未初始化的 vector 设置为另一个的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226954/