是否可以比较两个迭代器?使用std :: min
进行比较void change ( typename TList <Item *>::Type ::iterator it_begin, typename TList <Item*>::Type ::iterator it_end )
{
....
this->items.resize ( index );
std::sort ( it_begin, std::min (it_end, it_begin += index - 1); //Compare two iterators, exception
....
}
抛出以下异常:
Assertion failed: Vector iterators incompatible...
还有其他比较方法吗?
答案 0 :(得分:15)
是。但我怀疑你是否可以用std::min
来做到这一点。
您可以使用std::distance
函数计算两个迭代器之间的距离。然后您可以使用距离来确定哪个迭代器是较小的迭代器。一旦知道了较小的迭代器,就可以将其传递给std::sort
函数。
以下是small illustration how to calculate distance:
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::vector<int> v(100); //vector of size 100
std::cout <<(std::distance(v.begin(), v.begin() + 10))<< std::endl;
std::cout <<(std::distance(v.begin() +25, v.begin() +10))<< std::endl;
}
输出:
10
-15
希望能让你充分了解如何继续做你想做的事。
答案 1 :(得分:3)
要回答这个问题,可以使用std :: distance()来测量到begin()迭代器的距离,然后可以比较这些距离。但是,正如Ben所指出的,您的代码还存在其他问题。见http://www.cplusplus.com/reference/std/iterator/distance/
答案 2 :(得分:2)
调用resize
后,所有现有的迭代器都无效。
此外,该行调用未定义的行为,因为您正在以不确定的顺序更改it_begin
并从中读取它。