यह C ++ मानक लाइब्रेरी रिमूव कोड का कोड है।
गलत। ऐसा नहीं है सी ++ मानक पुस्तकालय कोड। यह C ++ मानक लाइब्रेरी फ़ंक्शन का एक संभावित आंतरिक कार्यान्वयन है । C ++ मानक वास्तविक कोड नहीं लिखता है; यह फ़ंक्शन प्रोटोटाइप और आवश्यक व्यवहार निर्धारित करता है।removeremove
दूसरे शब्दों में: सख्त भाषा के दृष्टिकोण से, जो कोड आप देख रहे हैं वह मौजूद नहीं है । यह कुछ हेडर फ़ाइल से हो सकता है जो आपके संकलक के मानक-पुस्तकालय कार्यान्वयन के साथ आता है। ध्यान दें कि C ++ मानक को उन हेडर फ़ाइलों की आवश्यकता भी नहीं है। फ़ाइलें कंपाइलर कार्यान्वयनकर्ताओं के लिए एक लाइन की आवश्यकताओं को पूरा करने के लिए एक सुविधाजनक तरीका है #include <algorithm>(जैसे कि मेकिंग std::removeऔर अन्य फ़ंक्शन उपलब्ध)।
if (!(*first == val))इसके बजाय असमानता का परीक्षण क्यों किया जाता है if (*first != val)?
क्योंकि केवल operator==फ़ंक्शन द्वारा आवश्यक है।
जब कस्टम प्रकारों के लिए ऑपरेटर ओवरलोडिंग की बात आती है, तो भाषा आपको सभी प्रकार की अजीब चीजें करने की अनुमति देती है। आप बहुत अच्छी तरह से एक वर्ग बना सकते हैं जिसमें एक अतिभारित है operator==लेकिन कोई अतिभारित नहीं है operator!=। या इससे भी बदतर: आप ओवरलोड कर सकते हैं operator!=लेकिन क्या यह पूरी तरह से असंबंधित चीजें हैं।
इस उदाहरण पर विचार करें:
#include <algorithm>
#include <vector>
struct Example
{
int i;
Example() : i(0) {}
bool operator==(Example const& other) const
{
return i == other.i;
}
bool operator!=(Example const& other) const
{
return i == 5; // weird, but nothing stops you
// from doing so
}
};
int main()
{
std::vector<Example> v(10);
// ...
auto it = std::remove(v.begin(), v.end(), Example());
// ...
}
यदि std::removeउपयोग किया जाता है operator!=, तो परिणाम काफी अलग होगा।
operator!=। बसoperator==कार्यान्वयन का उपयोग करें :bool operator!=(const Foo& other) { return !(*this == other); }