将一个预先声明但未初始化的向量设置为另一个的别名
Set a predeclared but uninitialized vector as an alias of another
在下面的代码中,我希望将向量 v
设置为向量 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;
不能"switched"从不是别名。
你可以让它始终是一个别名,在一种情况下它指的是传递的 in
向量,在另一种情况下指的是 in
向量的副本。
例如:
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
向量。
在下面的代码中,我希望将向量 v
设置为向量 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;
不能"switched"从不是别名。
你可以让它始终是一个别名,在一种情况下它指的是传递的 in
向量,在另一种情况下指的是 in
向量的副本。
例如:
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
向量。