2013-02-10 6 views
0

C++에서 sort 알고리즘을 사용하여 vector을 정렬하려고합니다.std :: sort in C++?

strstd::vector<int>의 이름입니다. 정렬하고 싶습니다. 이 차이는 무엇

:

std::sort(str.rend(),str.rbegin()) 

은이 :

std::sort(str.begin(),str.end()) 
+5

'str ::'이 아니라'std ::'를 의미한다고 생각합니다. –

+2

@ofey 여러분은'std :: sort'를 의미했는지 (또는 의미하지는 않았던지) 분명히 확인하기 위해 질문을 업데이트해야한다고 생각합니다. –

답변

5

당신이 문자열 (std::vectorstd::string도 이후 sort 방법이를) 정렬 할 std::sort를 사용하려는 가정하면, 첫 번째 문이 잘못하고 정의되지 않은 동작 (UB)로 연결 : 여기에

std::sort(str.rend(),str.rbegin()); 

std::sort은 "최종"이터레이터 인 str.rend()을 역 참조하려고 시도합니다. 그러한 반복자를 참조 해제하는 것은 UB입니다.

역 반복자의 올바른 사용은

std::sort(str.rbegin(),str.rend()); 

이 문자열/벡터 초래가 내림차순으로 정렬되는 것입니다.

+0

downvote에 대한 이유가 무엇입니까? – juanchopanza

3

용기의 많은 다른 것들 (같은 std::string)에 표준 라이브러리의 반복자 시작 reverse 다양한 있습니다 r(rbegin(), rend and the like). 이것들은 역순으로 반복됩니다. beginend을 사용하면 문자열을 올바른 형식으로 처음부터 끝까지 정렬 할 수 있습니다. 당신이 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::sortbegin()end()std::vector<int>으로 전화하는 것 외에는 위와 동일하게하십시오.