sort
称为:
sort (first element, last element);
所以,如果我有一个数组:
int a[n];
我应该将sort
称为:
sort(&a[0], &a[n-1]);
因为a[0]
是第一个元素,a[n-1]
是最后一个元素。但是,当我这样做时,它不会对最后一个元素进行排序。要获得完全排序的数组,我必须使用:
sort(&a[0], &a[n]);
为什么会这样?
答案 0 :(得分:6)
因为stl中的范围总是定义为从第一个元素迭代器到“一个接一个”结束的半开放范围。使用C ++ 11,您可以使用:
int a[n];
sort(std::begin(a),std::end(a));
答案 1 :(得分:2)
c ++中STL中的排序格式是,
sort (first element, last element);
不,不是。您应该为第一个元素提供一个迭代器,并且如您所发现的那样为一个过去的迭代器提供。
标准库通常使用semi-open intervals来描述通过迭代器的范围。否则就不可能表达空范围:
// An empty container!
std::vector<int> v;
// Pretend that `v.end()` returns an iterator for the actual last element,
// with the same caveat as `v.begin()` that the case where no elements
// exist gives you some kind of "sentinel" iterator that does not represent
// any element at all and cannot be dereferenced
std::vector<int>::iterator a = v.begin(), b = v.end();
// Oh no, this would think that there's one element!
std::sort(a, b);