我想在C++中使用sort
算法对vector
进行排序。std ::在C++中排序?
str
是std::vector<int>
的名称我想排序。
这是什么之间的区别:
std::sort(str.rend(),str.rbegin())
这:
std::sort(str.begin(),str.end())
我想在C++中使用sort
算法对vector
进行排序。std ::在C++中排序?
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());
这将导致字符串/向量以降序的方式排序。
downvote的任何理由? – juanchopanza 2013-07-03 07:04:47
上大量集装箱和其他东西(如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
与std::vector<int>
的begin()
和end()
即可。
我想你的意思是'std ::',而不是'str.'。 – 2013-02-10 10:05:05
@ofey我认为你应该更新这个问题,以明确你的意思(或不意味着)'std :: sort'。 – 2013-02-10 13:56:56