STL算法处理的都是半开区间。例如,如果这样使用std::sort操作:
此时,算法处理的是pos1到pos2之前的一个元素,即[pos1, pos2);
如果要包括pos2指向的元素,那么应该这样操作:
另外一个要注意的是,传入的两个迭代器形成的区间必须是有效区间,所谓有效是指:从起点出发,逐一遍历,能够到达终点。也就是说程序员必须保证传入的两个迭代器必须属于同一个元素,前后放置正确,否则结果无法预料(每种实现应对这个错误的方法不同)。
有些算法可以同时处理多个区间,此时必须确保第二个区间的元素个数大于等于第一个区间的元素个数。特别是执行覆盖操作(如copy)的时候,必须保证目标区间够大。
解决办法: