比较迭代器,C ++

时间:2011-04-30 15:13:27

标签: c++ iterator compare

是否可以比较两个迭代器?使用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... 

还有其他比较方法吗?

3 个答案:

答案 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并从中读取它。