c++ - 为什么我不能返回这个 vector 的 vector ?

标签 c++ vector reference return

我有一个类声明了一个 char 类型的 vector 的 vector ,如下所示,并包含一个方法来读取它的一半并返回结果 vector 。

class Mapa 
{
private:
    vector<vector<char> > vec;

public:
    //Constructor
    Mapa():vec(0,vector<char>(0)){};

    Mapa(int row, int col):vec(row, vector<char>(col)){};
    virtual ~Mapa(){};
     }

const Mapa& just_Half()
    {

        Mapa temp(vec.size(),vec[0].size());
        int a = vec.size()*vec[0].size()/2;
        for (int i = 0; i < vec.size() && a>0; i++, a--)
            for (int j = 0; j < vec[i].size() && a>0; j++, a--){
                temp.vec[i][j]=vec[i][j];
            }
        return temp;

    }

主要是我做的:

Mapa Mapa1(3, 10);
Mapa Mapa2;
Mapa2=Mapa1.just_Half();

我的问题是,为什么 Map2 最后是空 vector ? 为什么它收不到温度?

感谢您的帮助。

最佳答案

问题是您的返回类型是对 Mapa 的引用。当函数超出范围时,您返回的 Mapa(在函数内名为 temp)会被破坏,因此您返回的是已破坏的 Mapa,这是未定义的。

解决方案很简单,按值返回而不是按引用返回:

const Mapa just_Half()
{

    Mapa temp(vec.size(),vec[0].size());
    int a = vec.size()*vec[0].size()/2;
    for (int i = 0; i < vec.size() && a>0; i++, a--)
        for (int j = 0; j < vec[i].size() && a>0; j++, a--){
            temp.vec[i][j]=vec[i][j];
        }
    return temp;
}

如果您担心这会产生不必要的拷贝,请不要担心。编译器几乎总是会用 return value optimization 优化复制操作。 .

关于c++ - 为什么我不能返回这个 vector 的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903406/

相关文章:

c++ - 如何将数字列表从字符串复制到 C++ vector

c++ - 在 vector 中使用迭代器循环

java - Java 中的链表引用

c++ - 我可以依赖嵌套的#includes 吗?

c++ - Guard Page Exception - 如何引发

c++ - if 命名空间内的语句给出错误

C++ 引用和返回值

c++ - 如何使用内置返回类型重载运算符?

c++ - 调整二维 vector 的内部尺寸

c++ - 未找到符号 C++ 打印 vector 到控制台