আমি ভাবছিলাম যে এর মতো একটি স্ট্রিংয়ের শেষ চরিত্রটি পাওয়ার মতো কোনও সংক্ষেপণ বা আরও মার্জিত উপায় আছে:
char lastChar = myString.at( myString.length() - 1 );
এমন কিছু myString.back()আছে বলে মনে হচ্ছে না to সমতুল্য কি আছে?
আমি ভাবছিলাম যে এর মতো একটি স্ট্রিংয়ের শেষ চরিত্রটি পাওয়ার মতো কোনও সংক্ষেপণ বা আরও মার্জিত উপায় আছে:
char lastChar = myString.at( myString.length() - 1 );
এমন কিছু myString.back()আছে বলে মনে হচ্ছে না to সমতুল্য কি আছে?
উত্তর:
সি ++ 11 এবং এর বাইরে, আপনি backসদস্য ফাংশনটি ব্যবহার করতে পারেন :
char ch = myStr.back();
সি ++ তে, std::string::backকোনও তদারকির কারণে পাওয়া যায় না তবে আপনি reverse_iteratorযেখান থেকে ফিরে আসেন তা ডিফারেন্স করে আপনি এটি পেতে পারেন rbegin:
char ch = *myStr.rbegin();
উভয় ক্ষেত্রেই স্ট্রিংটিতে আসলে কমপক্ষে একটি চরিত্র রয়েছে তা নিশ্চিত করতে সাবধান হন! অন্যথায়, আপনি অনির্ধারিত আচরণ পাবেন যা একটি খারাপ কাজ।
আশাকরি এটা সাহায্য করবে!
--std=c++11জন্য আমাকে g ++ জোর করে সংকলন back()করতে হয়েছিল।
আপনি সম্ভবত প্রথমে স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করতে চান এবং এর মতো কিছু করতে চান:
if (!myStr.empty())
{
char lastChar = *myStr.rbegin();
}
*myStr.end()একই মত না myStr[myStr.size()]! এবং, এটি ছিল এমনকি myStr.rbegin()সমতুল্য myStr.end()-1, যা খালি স্ট্রিংয়ে স্পষ্টত অবৈধ।
আপনি কোনও ফাংশন টেমপ্লেট লিখতে backপারেন যা সাধারণ পাত্রে সদস্য ফাংশনকে প্রতিনিধিত্ব করে এবং স্ট্রিংগুলির জন্য অনুপস্থিত কার্যকারিতা প্রয়োগ করে এমন একটি সাধারণ ফাংশন:
template <typename C>
typename C::reference back(C& container)
{
return container.back();
}
template <typename C>
typename C::const_reference back(const C& container)
{
return container.back();
}
char& back(std::string& str)
{
return *(str.end() - 1);
}
char back(const std::string& str)
{
return *(str.end() - 1);
}
তারপরে আপনি স্ট্রিং বা ভেক্টর back(foo)কিনা তা চিন্তা না করেই বলতে পারেন foo।