繁体   English   中英

std :: sort在c ++中?

[英]std::sort in c++?

我想使用C ++中的sort算法对vector进行sort

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

这有什么区别:

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

和这个:

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

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

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

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

正确使用反向迭代器将是

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

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

标准库中许多容器和其他事物(例如std::string )上的迭代器具有以r rbegin()rend等)开头的reverse变体。 这些将以相反的顺序进行迭代。 仅使用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::vector<int>begin()end()调用std::sort

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM