在c ++中std :: sort?

时间:2013-02-10 10:03:14

标签: c++ algorithm sorting vector containers

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

str是我要排序的std::vector<int>的名称。

这有什么区别:

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

和此:

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

2 个答案:

答案 0 :(得分:5)

假设您打算使用std::sort对字符串进行排序(因为std::vectorstd::string都没有sort方法),第一个语句不正确并导致< strong>未定义的行为(UB):

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

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

正确使用反向迭代器将是

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

这将导致字符串/向量按降序排序。

答案 1 :(得分: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::sort的{​​{1}}和begin()致电end()