std :: string의 마지막 요소를 가져옵니다. 같은 문자열의 마지막 문자를

약어 또는 다음과 같은 문자열의 마지막 문자를 얻는 더 우아한 방법이 있는지 궁금합니다.

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();

두 경우 모두 문자열에 실제로 적어도 하나의 문자가 있는지 확인하십시오! 그렇지 않으면 정의되지 않은 동작이 발생 하며 이는 나쁜 일입니다.

도움이 되었기를 바랍니다!


답변

먼저 문자열의 길이를 확인하고 다음과 같이 할 수 있습니다.

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.


답변

*(myString.end() - 1)아마도? 그것도 우아하지 않습니다.

python-esque myString.at(-1)는 이미 부풀린 클래스를 너무 많이 요구합니다.