C++ 将预先声明但未初始化的向量设置为另一个向量的别名
在下面的代码中,我希望将向量C++ 将预先声明但未初始化的向量设置为另一个向量的别名,c++,vector,alias,C++,Vector,Alias,在下面的代码中,我希望将向量v设置为中的向量,而不复制其内容,但我不能使用像vector&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
设置为中的向量,而不复制其内容,但我不能使用像vector&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`
};
pt类
{
私人:
向量v;
整数大小;
公众:
无效构造(int n)
{
对于(int i=n-1;i>=0;--i)
{
v[i]=v[i-1]+v[i-2];
}
}
pt(向量和输入,布尔无拷贝=假)
{
如果(无副本)
{
&v=in;//我想解决这个问题
}
else{}
构造(in.size());
}
//使用'v'的其他函数`
};
类似
vector<int> v;
或者你也可以从
中的移动,正如@Carl在评论中建议的那样。这很快,但是会破坏<代码> < <代码>向量> < /p>“在不复制内容的情况下设置向量A到向量B”的声明在C++中没有任何意义。这就像说“拿一个盒子,盒子里的亮球在你的左边,把这个盒子放在你的右边,但不要在盒子里移动任何亮球。他们必须留在你的左边。我想这可能是一个错误。你到底想解决什么问题?pt
的目的是什么?@SamVarshavchik我的意思是类似于vector&v=in
@Carl的移动速度比仅仅添加别名要快?编译时总是知道没有拷贝吗?在这种情况下,您将在此处使用模板。
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;
}