通过引用传递向量,但更改不会坚持 c++

Passing vector by reference, but alterations won't stick c++

本文关键字:c++ 坚持 引用 向量      更新时间:2023-10-16
void RemoveGreenEffect::processImage(vector<Point>& points)
{
    for (int i = 0; i < points.size(); ++i)
    {
        points[i].setGreen(0);
    }
}

该函数适当地引入向量并在局部进行更改。但是,当程序返回到main时,它不会保留更改。有人能解释一下我做错了什么吗?如果有帮助,下面是main中的调用函数。

for (int i = 0; i < ppm.getRows(); ++i)
{
    my_effect->processImage(picture.getPicture()[i]); 
}

my_effect是一个基类指针,指向派生对象RemoveGreenEffect。getPicture()是Point对象的向量的向量,所以getPicture()[i]是Point类的向量。目标是一次一行地删除图片中的所有绿色值像素,但同样,该更改仅在局部有效。

编辑,这里是getPicture()
vector<vector<Point>> PointFormatPicture::getPicture()
{
return _picture;
}

下面是_picture

vector<vector<Point>> _picture;

改为按引用返回:

vector<vector<Point>>& PointFormatPicture::getPicture()
{
   return _picture;
}