약어 또는 다음과 같은 문자열의 마지막 문자를 얻는 더 우아한 방법이 있는지 궁금합니다.
char lastChar = myString.at( myString.length() - 1 );
같은 myString.back()것이 존재하지 않는 것 같습니다. 동등한 것이 있습니까?
답변:
C ++ 11 이상에서는 back멤버 함수를 사용할 수 있습니다 .
char ch = myStr.back();
C ++ 03에서는 std::string::back감독으로 인해 사용할 수 없습니다.하지만 다음 reverse_iterator에서 반환 된 값을 역 참조하여이 문제를 해결할 수 있습니다 rbegin.
char ch = *myStr.rbegin();
두 경우 모두 문자열에 실제로 적어도 하나의 문자가 있는지 확인하십시오! 그렇지 않으면 정의되지 않은 동작이 발생 하며 이는 나쁜 일입니다.
도움이 되었기를 바랍니다!
--std=c++11for 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.