我想知道是否有缩写或更优雅的方式来获取字符串的最后一个字符,例如:
char lastChar = myString.at( myString.length() - 1 );
喜欢的东西myString.back()
似乎并不存在。有等同的吗?
Answers:
在C ++ 11及更高版本中,可以使用back
成员函数:
char ch = myStr.back();
在C ++ 03中,std::string::back
由于疏忽而无法使用,但是您可以通过取消引用reverse_iterator
从rbegin
以下位置获得的返回值来解决此问题:
char ch = *myStr.rbegin();
在这两种情况下,请务必确保该字符串实际上至少包含一个字符!否则,您将获得不确定的行为,这是一件坏事。
希望这可以帮助!
--std=c++11
为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
是字符串还是向量。