一些代码,一个示例类:
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; }
};
Run Code Online (Sandbox Code Playgroud)
一个函数对象类:
class F
{
public:
inline bool operator()(const T &a, const T &b) const
{
return (((a.getX() * a.getY()) > ( b.getX() * b.getY())) ? 1 : 0);
}
};
Run Code Online (Sandbox Code Playgroud)
我创建了类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);
Run Code Online (Sandbox Code Playgroud)
使用std :: sort对象后包含其他值(x,y).为什么std :: sort会更改对象的值?怎么了 ?
首先,您创建了一个包含10个元素的向量
std::vector<T> myVec(10);
Run Code Online (Sandbox Code Playgroud)
然后,您向向量添加了10个新元素
for(int i = 0; i < 10; ++i)
{
myVec.push_back(p[i]);
}
Run Code Online (Sandbox Code Playgroud)
现在矢量有20个元素.你对20个元素的这个向量进行了排序.
也许你的意思是以下
std::vector<T> myVec;
myVec.reserve( 10 );
//...
for(int i = 0; i < 10; ++i)
{
myVec.push_back(p[i]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |