std::vector<string> names;
std::vector<string>::iterator start = names.begin();
std::vector<string>::iterator end = names.end();
sort (start,end);
//are my start and end valid at this point?
//or they do not point to front and tail resp?
Run Code Online (Sandbox Code Playgroud)
Kir*_*sky 22
根据C++标准§23.1/ 11:
除非另有说明(显式或通过根据其他函数定义函数),调用容器成员函数或将容器作为参数传递给库函数不应使迭代器无效,或更改该容器中对象的值.
§25.3"排序和相关操作"没有指定迭代器将被无效,因此问题中的迭代器应该保持有效.
std::sort不会使向量的迭代器失效.排序模板使用*迭代器上的运算符来访问和修改向量的内容,并通过迭代器修改向量元素到向量中已有的元素将不会使任何迭代器无效.
综上所述,
除了对Kirill V. Lyadvinsky提供的标准的支持(矢量排序是否使迭代器失效?):
如果算法的"效果"部分表示修改了作为参数传递的任何迭代器指向的值,则该算法还有一个额外的类型要求:该参数的类型应满足可变迭代器的要求(24.1).
除了它的类别之外,正向,双向或随机访问迭代器也可以是可变的或常量的,这取决于表达式*i的结果是作为引用还是作为对常量的引用.