如果我的容器大小大于32个元素,为什么在调用std :: sort时调用swap?]

问题描述 投票:4回答:1
你好,我有一个简单的问题:

class A { public: A(int); A(const A&); A& operator=(const A&); ~A(); private: int* ptr_; friend bool operator<(const A&, const A&); friend void swap(A&, A&); }; A::A(int x) : ptr_(new int(x)) {} A::A(const A& rhs) : ptr_(rhs.ptr_ ? new int(*rhs.ptr_) : nullptr) {} A& A::operator = (const A & rhs) { int* tmp = rhs.ptr_ ? new int(*rhs.ptr_) : nullptr; delete ptr_; ptr_ = tmp; return *this; } A::~A() { delete ptr_; } bool operator<(const A& lhs, const A& rhs) { cout << "operator<(const A&, const A&)" << endl; return *lhs.ptr_ < *rhs.ptr_; } void swap(A& lhs, A& rhs) { cout << "swap(A&, A&)" << endl; using std::swap; swap(lhs.ptr_, rhs.ptr_); } int main() { std::vector<A> v{ 33,32,31,30,29,28,27,26,25,24,23,22, 21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5, 4,3,2,1 }; std::sort(v.begin(), v.end()); }

现在,如果我使元素的数量等于或小于32,则不会调用swap并对元素进行排序!但是,如果我使它们大于32,则会调用swap

    我正在使用MSVC ++ 2019 X64平台。
  • 因此,何时调用swap,何时不调用,为什么?谢谢!
  • 我没有在复制分配中使用swap只是为了区分来自复制分配运算符的对该调用的排序方式。
  • 你好,我有一个简单的问题:A类{public:A(int); A(const A&); A&运算符=(const A&); 〜A();私人:int * ptr_;朋友布尔运算符
  • c++ swap
    1个回答
    6
    投票
    像这样的Microsoft std::sort实现looks
    © www.soinside.com 2019 - 2024. All rights reserved.