Joh*_*nas 9 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
....
}
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
Assertion failed: Vector iterators incompatible...
Run Code Online (Sandbox Code Playgroud)
比较还有其他方法吗?
Naw*_*waz 15
是.但我怀疑你是否可以这样做std::min.
您可以使用std::distance函数来计算两个迭代器之间的距离.然后您可以使用距离来确定哪个迭代器是较小的迭代器.一旦知道了较小的迭代器,就可以将其传递给std::sort函数.
以下是如何计算距离的小图:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
10
-15
Run Code Online (Sandbox Code Playgroud)
希望能让你充分了解如何继续做你想做的事.
在《C++ Primer 5th Ed》一书中。在第 111 页第 3.4.2 节迭代器算术中说,
我们可以使用 == 和 != 来与任何库容器中的有效迭代器进行比较。
本节还告诉我们,字符串和向量的迭代器支持关系运算符(也称为迭代器算术),其中包括 >、>=、<、<=。