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;
}