将一个预先声明但未初始化的向量设置为另一个的别名

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 向量。