[英]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::vector
和std::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
变体。 这些将以相反的顺序进行迭代。 仅使用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::vector<int>
的begin()
和end()
调用std::sort
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.