Получить последний элемент std:: string
мне было интересно, есть ли аббревиатура или более элегантный способ получить последний символ строки, например:
char lastChar = myString.at( myString.length() - 1 );
что-то вроде myString.back() Кажется, не существует. Есть ли эквивалент?
4 ответа:
в C++11 и выше, вы можете использовать
backфункции:char ch = myStr.back();В C++03,
std::string::backнедоступно из-за недосмотра, но вы можете обойти это, разыменовавreverse_iteratorвы возвращаетесь изrbegin:char ch = *myStr.rbegin();в обоих случаях будьте осторожны, чтобы убедиться, что строка на самом деле имеет по крайней мере один символ в нем! В противном случае, вы получите неопределенное поведение, что очень плохо.
надеюсь, что это помогает!
вы, вероятно, хотите сначала проверить длину строки и сделать что-то вроде этого:
if (!myStr.empty()) { char lastChar = *myStr.rbegin(); }
вы можете написать шаблон функции
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- строка или вектор.