我想在C ++中使用vector
算法对sort
进行排序。
str
是我要排序的std::vector<int>
的名称。
这有什么区别:
std::sort(str.rend(),str.rbegin())
和此:
std::sort(str.begin(),str.end())
答案 0 :(得分:5)
假设您打算使用std::sort
对字符串进行排序(因为std::vector
和std::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)开头。这些将以反向顺序迭代。仅使用begin
和end
将从开始到结束以正确的格式对字符串进行排序。
尽量避免使用反向迭代器,只需在字符串上使用常规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()
。