হ্যালো আমার একটি সহজ প্রশ্ন আছে:
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
বলা হয় না।
- আমি x64 এ এমএসভিসি ++ 2019 ব্যবহার করছি।
- কখন
swap
ডাকা হয় এবং কখন হয় না এবং কেন? ধন্যবাদ! - আমি
swap
কেবল অনুলিপি-অ্যাসাইনমেন্ট অপারেটর থেকে কল থেকে কল করার মধ্যে পার্থক্য করতে ব্যবহার করিনি ।
@ এভগ এটি কি একটি প্রয়োজনীয়তা বা এটি এই নির্দিষ্ট প্রসঙ্গে ব্যাখ্যা?
—
ফ্রান্সোইস অ্যান্ডরিয়াক্স
@ ফ্রানসোয়াআন্ড্রিয়াক্স, এটি মাইক্রোসফ্ট স্ট্যান্ডার্ড লাইব্রেরির একটি বাস্তবায়ন বিশদ। আমার ধারণা হ'ল এটিই ওপি কর্তৃক পরিপূর্ণ আচরণের কারণ। আমি বর্তমানে আরও বিশদ পাওয়ার জন্য সোর্স কোডটি সন্ধান করছি।
—
এভগ
উৎস প্রাসঙ্গিক অংশ:
—
ChrisMM
while (_ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal)
যেখানে _ISORT_MAX
32 এর মান দেওয়া হয় রেখা 3447 <algorithm>
বনাম 16.5.0 ব্যবহার
কোনও ভাষাতে কোনও আধুনিক মানক পাঠাগারগুলিতে আসল কুইকোর্ট ব্যবহার করা হয় না। সমস্ত সংশোধিত মিশ্র সংস্করণ ব্যবহার করে যা কেবলমাত্র উপাদানগুলির সংখ্যা পর্যাপ্ত পরিমাণে বড় হওয়ার পরে একটি quicksort হয়। উদাহরণস্বরূপ জাভা এবং পাইথন টিমসোর্ট ব্যবহার করে যখন .NET ফ্রেমওয়ার্ক এবং জিসিসির সি ++ লাইব্রেরি ইন্টারসোর্ট ব্যবহার করে । libstdc ++ এবং libc ++ সংক্ষিপ্ত অনুক্রমের জন্য সন্নিবেশ বাছাইও ব্যবহার করে। দেখুন বিভিন্ন এসটিএল বাস্তবায়নে সি ++ ১১ টি স্ট্যান্ড :: সাজানোর ক্ষেত্রে কোন অ্যালগরিদম ব্যবহার করা হয়?
—
phuclv
std::sort
উপাদানগুলির সংখ্যা 32 বা তার চেয়ে কম হলে সন্নিবেশ সজ্জাতে রিসর্ট করে এবং অন্যথায় দ্রুত বাছাই করে।