C++ std::sort 具有相同的参数
C++ std::sort with identical arguments
我正在阅读别人的代码,我看到了这样的东西:
sort(myvec.begin(), myvec.begin());
我写了一些代码来测试它,它似乎和
做了同样的事情
sort(myvec.begin(), myvec.end());
他们真的做同样的事情吗?有记录吗?有没有办法理解为什么,或者以这种方式实施它只是一个任意选择?
回答后更新
是的,这是一个空操作。我的测试代码有一个错误。
代码
sort(myvec.begin(), myvec.begin());
应该是空操作,因为那是一个空范围。代码
sort(myvec.begin(), myvec.end());
将对 myvec
的全部内容进行排序。如果这些碰巧做同样的事情,则意味着您的矢量已经排序。第一行几乎可以肯定是拼写错误或等待发生的错误。
迭代器只是指定范围的一种方式。如果您甚至认为这段代码可以正常工作,那么您一定对它们有不好的直觉。如果我们使用采用 2 个索引的方法 -> 正在排序的向量部分的开始索引和指示它结束的索引会怎么样。 sort(0, myvec.size())
和 sort(0, 0)
是等价的吗?
这段代码无疑应该是sort(myvec.begin(), myvec.end());
我正在阅读别人的代码,我看到了这样的东西:
sort(myvec.begin(), myvec.begin());
我写了一些代码来测试它,它似乎和
做了同样的事情sort(myvec.begin(), myvec.end());
他们真的做同样的事情吗?有记录吗?有没有办法理解为什么,或者以这种方式实施它只是一个任意选择?
回答后更新
是的,这是一个空操作。我的测试代码有一个错误。
代码
sort(myvec.begin(), myvec.begin());
应该是空操作,因为那是一个空范围。代码
sort(myvec.begin(), myvec.end());
将对 myvec
的全部内容进行排序。如果这些碰巧做同样的事情,则意味着您的矢量已经排序。第一行几乎可以肯定是拼写错误或等待发生的错误。
迭代器只是指定范围的一种方式。如果您甚至认为这段代码可以正常工作,那么您一定对它们有不好的直觉。如果我们使用采用 2 个索引的方法 -> 正在排序的向量部分的开始索引和指示它结束的索引会怎么样。 sort(0, myvec.size())
和 sort(0, 0)
是等价的吗?
这段代码无疑应该是sort(myvec.begin(), myvec.end());