2013-02-10 58 views
0

我想在C++中使用sort算法对vector进行排序。std ::在C++中排序?

strstd::vector<int>的名称我想排序。

这是什么之间的区别:

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

这:

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

我想你的意思是'std ::',而不是'str.'。 – 2013-02-10 10:05:05

+2

@ofey我认为你应该更新这个问题,以明确你的意思(或不意味着)'std :: sort'。 – 2013-02-10 13:56:56

回答

5

假设你打算使用std::sort字符串(因为无论std::vector也不std::stringsort方法)进行排序,第一个说法是不正确的,导致未定义行为(UB):

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

这里,std::sort将试图取消引用str.rend(),这是一个“过去结束”迭代器。取消引用这样的迭代器是UB。

甲正确使用反向迭代器将是

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

这将导致字符串/向量以降序的方式排序。

+0

downvote的任何理由? – juanchopanza 2013-07-03 07:04:47

3

上大量集装箱和其他东西(如std::string)标准库的迭代器有reverse品种,其开始与r(rbegin(), rend and the like)。这些将按照相反顺序进行迭代。仅使用beginend将从开始到结束以正确的格式对字符串进行排序。

尽量避免使用反向迭代器,只需使用你的字符串经常begin()end()

std::string str = "bacd"; 
std::sort(str.begin(),str.end()); 
std::cout << str << std::endl; // should produce "abcd" on your output, without quotes 

编辑:

所以...你想vector<int>来代替排序?如果是这样,请按照上述步骤进行操作,但拨打电话std::sortstd::vector<int>begin()end()即可。