pie*_*ace 5 c++ algorithm class
我已经在类中描述了交换函数,据我了解,如果类定义了它自己的交换函数,则它应该优先于内置交换函数。
以下两行来自C ++入门,接着出现一个问题,询问您使用类上算法标头中的排序算法,并观察调用交换的次数。
“如果一个类定义了自己的交换,那么该算法将使用该类的特定版本。否则,它将使用该库定义的交换函数。”
class HasPtr{
public:
friend void swap(HasPtr&, HasPtr&);
friend bool operator<(const HasPtr&,const HasPtr&);
HasPtr(const std::string& s=std::string()) : ps(new std::string(s)), i(0){}
private:
std::string *ps;
int i;
};
inline void swap(HasPtr&lhs, HasPtr& rhs){
using std::swap;
swap(lhs.ps,rhs.ps);
swap(lhs.i, rhs.i);
std::cout<<"Swap was called"<<std::endl;
}
bool operator<(const HasPtr& lhs,const HasPtr& rhs){
return *lhs.ps<*rhs.ps;
}
int main(){
std::vector<HasPtr>v1{HasPtr("this"),HasPtr("is"),HasPtr("a"),HasPtr("keyboard")};
std::sort(v1.begin(),v1.end());}
Run Code Online (Sandbox Code Playgroud)
现在,由于对sort的调用使用了<来重新排列元素,并且根据摘录,算法应使用类定义的swap版本,因此,每次算法重新排列元素时都应打印“ swap was被调用”,但似乎并没有并且简单地出现使用默认版本的swap是std :: swap。