c++ - 将一个预先声明但未初始化的 vector 设置为另一个的别名

标签 c++ vector alias

在下面的代码中,我想要 vector 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 vector ,在另一种情况下指代 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;
}

或者您也可以从 in 移动,正如@Carl 在评论中建议的那样。这很快,但会破坏 in vector 。

关于c++ - 将一个预先声明但未初始化的 vector 设置为另一个的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226954/

相关文章:

c++ - 使用 boost::serialization 将派生类指针序列化为 vector 的问题

c++ - int &b =++a;//这一行工作正常 int &c = a++;//结果出错

c++ - vector 中的重复元素

c++ - 初始化引用时避免按值复制

c++ - R 和 C++ 迭代

c++ - vector 下标超出范围错误 C++

c++ - 平衡文件空间、内存访问和写入速度以将结构数组写入文件

javascript - 通过别名获取 Javascript 字符串变量的值

SELECT 语句的 SQL 别名

logging - 如何使用 Sitecore 修复项目别名的错误日志记录?