C++에서 sort
알고리즘을 사용하여 vector
을 정렬하려고합니다.std :: sort in C++?
str
은 std::vector<int>
의 이름입니다. 정렬하고 싶습니다. 이 차이는 무엇
:
std::sort(str.rend(),str.rbegin())
은이 :
std::sort(str.begin(),str.end())
C++에서 sort
알고리즘을 사용하여 vector
을 정렬하려고합니다.std :: sort in C++?
str
은 std::vector<int>
의 이름입니다. 정렬하고 싶습니다. 이 차이는 무엇
:
std::sort(str.rend(),str.rbegin())
은이 :
std::sort(str.begin(),str.end())
당신이 문자열 (std::vector
도 std::string
도 이후 sort
방법이를) 정렬 할 std::sort
를 사용하려는 가정하면, 첫 번째 문이 잘못하고 정의되지 않은 동작 (UB)로 연결 : 여기에
std::sort(str.rend(),str.rbegin());
std::sort
은 "최종"이터레이터 인 str.rend()
을 역 참조하려고 시도합니다. 그러한 반복자를 참조 해제하는 것은 UB입니다.
역 반복자의 올바른 사용은
std::sort(str.rbegin(),str.rend());
이 문자열/벡터 초래가 내림차순으로 정렬되는 것입니다.
downvote에 대한 이유가 무엇입니까? – juanchopanza
용기의 많은 다른 것들 (같은 std::string
)에 표준 라이브러리의 반복자 시작 reverse
다양한 있습니다 r
(rbegin()
, rend
and the like). 이것들은 역순으로 반복됩니다. begin
과 end
을 사용하면 문자열을 올바른 형식으로 처음부터 끝까지 정렬 할 수 있습니다. 당신이 vector<int>
대신 정렬 할 ...
그래서 :
std::string str = "bacd";
std::sort(str.begin(),str.end());
std::cout << str << std::endl; // should produce "abcd" on your output, without quotes
편집 :
는 역 반복자를 사용하지 않도록하고 당신의 문자열에 일반 begin()
및 end()
를 사용하려고? 그렇다면 std::sort
begin()
및 end()
std::vector<int>
으로 전화하는 것 외에는 위와 동일하게하십시오.
'str ::'이 아니라'std ::'를 의미한다고 생각합니다. –
@ofey 여러분은'std :: sort'를 의미했는지 (또는 의미하지는 않았던지) 분명히 확인하기 위해 질문을 업데이트해야한다고 생각합니다. –