【发布时间】:2014-05-11 15:05:43
【问题描述】:
首先是一些代码,一个示例类:
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(1, 100);
class T
{
private:
int x;
int y;
public:
T(): x(dis(gen)), y(dis(gen)) {}
int getX() const { return x; }
int getY() const { return y; }
};
一个函数对象类:
class F
{
public:
inline bool operator()(const T &a, const T &b) const
{
return (((a.getX() * a.getY()) > ( b.getX() * b.getY())) ? 1 : 0);
}
};
我创建了 T 类的对象,然后尝试对它们进行排序:
std::vector<T> myVec(10);
T *p = new T[10];
F f;
for(int i = 0; i < 10; ++i)
{
myVec.push_back(p[i]);
}
std::sort(myVec.begin(), myVec.end(), f);
使用 std::sort 后对象包含其他值 (x, y)。为什么 std::sort 会改变对象的值?怎么了?
【问题讨论】:
-
旁注:
return (expr ? 1 : 0)与布尔上下文中的return expr相同。 -
你还没有在
p上初始化你的数组......至少在你发布的代码中...... -
'为什么 std::sort 会改变对象的值?' 不打算这样做?!?它应该对值进行排序,而不是更改它们!!