繁体   English   中英

为什么不能返回此向量向量?

[英]Why can't I return this vector of vectors?

我有一个类,它声明一个char类型的向量的向量,如下所示,并包含一个读取其中一半并返回所得向量的方法。

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在此结尾处是正向量和空向量? 为什么没有收到温度?

谢谢你的帮助。

问题是您的返回类型是对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;
}

如果您担心这样做会造成不必要的复制,请不要担心。 编译器几乎总是通过返回值优化来优化该复制操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM