将预定但非初始化的向量设置为另一个别名

Set a predeclared but uninitialized vector as an alias of another

本文关键字:设置 向量 另一个 别名 初始化      更新时间:2023-10-16

在以下代码中,我希望向量 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向量,而在另一种情况下,它是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;
}

,您也可以从@carl在评论中提出的那样从in移动。这很快,但会破坏in矢量。