এটি সি ++ স্ট্যান্ডার্ড লাইব্রেরি সরানোর কোডের কোড।
ভুল। এটা না C ++ স্ট্যান্ডার্ডের গ্রন্থাগার কোড। এটি সি ++ স্ট্যান্ডার্ড লাইব্রেরি ফাংশনের একটি সম্ভাব্য অভ্যন্তরীণ বাস্তবায়ন । সি ++ স্ট্যান্ডার্ড প্রকৃত কোড নির্ধারণ করে না; এটি ফাংশন প্রোটোটাইপ এবং প্রয়োজনীয় আচরণগুলি নির্ধারণ করে।removeremove
অন্য কথায়: কঠোর ভাষার দৃষ্টিকোণ থেকে, আপনি যে কোডটি দেখছেন তা বিদ্যমান নেই । এটি এমন কোনও শিরোনাম ফাইল হতে পারে যা আপনার সংকলকের মানক-গ্রন্থাগার বাস্তবায়নের সাথে আসে। মনে রাখবেন যে সি ++ স্ট্যান্ডার্ডের এমনকি সেই শিরোনাম ফাইলগুলির অস্তিত্বের প্রয়োজন নেই। ফাইলগুলি কম্পাইলার প্রয়োগকারীদের জন্য লাইনের মতো প্রয়োজনীয়তা মেটাতে #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); }