根据其他建议,取消引用可能会出现问题,但我在调用max_element函数时甚至在取消引用之前就出现了分段错误。
最小可复制示例:
#include <bits/stdc++.h>
using namespace std;
class B
{
public:
int a, b;
int getA()
{
return a;
}
int getB()
{
return b;
}
};
class A
{
public:
vector<B> array;
A()
{
array.resize(5);
array[0].a = array[0].b = 3;
array[1].a = array[1].b = 5;
array[2].a = array[2].b = 7;
array[3].a = array[3].b = 1;
array[4].a = array[4].b = 2;
}
vector<B> getArray()
{
return array;
}
};
int main()
{
A aobj;
B maxE = *std::max_element(aobj.getArray().begin(), aobj.getArray().end(),
[](B jobA, B jobB) {
return jobA.getA() < jobB.getA();
});
cout<<maxE.getA();
return 0;
}
a
的成员函数
vector<B> getArray()
返回成员变量数组
的副本。调用它两次将生成两个独立的副本,因此将它们与std::max_element
一起使用是危险的。
应该让函数返回对成员变量array
的引用。
vector<B>& getArray() // add &