निम्नलिखित कोड पर विचार करें फोन नहीं करता है:std :: तरह हमेशा std :: स्वैप
#include <algorithm>
#include <iostream>
#include <vector>
namespace my_space
{
struct A
{
double a;
double* b;
bool operator<(const A& rhs) const
{
return this->a < rhs.a;
}
};
void swap(A& lhs, A& rhs)
{
std::cerr << "My swap.\n";
std::swap(lhs.a, rhs.a);
std::swap(lhs.b, rhs.b);
}
}
int main()
{
const int n = 20;
std::vector<my_space::A> vec(n);
for (int i = 0; i < n; ++i) {
vec[i].a = -i;
}
for (int i = 0; i < n; ++i) {
std::cerr << vec[i].a << " ";
}
std::cerr << "\n";
std::sort(vec.begin(), vec.end());
for (int i = 0; i < n; ++i) {
std::cerr << vec[i].a << " ";
}
std::cerr << "\n";
}
अगर मैं n=20
का उपयोग, कस्टम स्वैप समारोह कहा जाता है और सरणी सॉर्ट हो जाता है। लेकिन अगर मैं n=4
का उपयोग करता हूं, तो सरणी को सही ढंग से क्रमबद्ध किया जाता है, लेकिन कस्टम स्वैप फ़ंक्शन नहीं कहा जाता है। ऐसा क्यों है? क्या होगा यदि मेरी वस्तुओं की प्रतिलिपि बनाना वास्तव में महंगा है?
इस परीक्षण के लिए, मैं जीसीसी 4.5.3 का उपयोग कर रहा था।
[यह प्रश्न] (http://stackoverflow.com/questions/6380862/how-to-provide-a-swap-function-for-my-class) सहायक होना चाहिए। – chris
बीटीडब्ल्यू, सामान्य आउटपुट के लिए 'std :: cerr' का उपयोग क्यों करें? – Nawaz
मैं सामान्य आउटपुट के लिए 'cerr' का उपयोग नहीं करता हूं। मैं सामान्य आउटपुट के लिए 'cout' और त्रुटि संदेश, डायग्नोस्टिक्स और डीबग के लिए' cerr' का उपयोग करता हूं। इस मामले में मुझे लगता है कि मैं 'cout' इस्तेमाल कर सकता था। – Petter