C++ C++;向量<;T>;::迭代器运算符+;
我拿着一个迭代器,它指向向量的一个元素,我想把它和向量的下一个元素进行比较 这是我的C++ C++;向量<;T>;::迭代器运算符+;,c++,iterator,operators,C++,Iterator,Operators,我拿着一个迭代器,它指向向量的一个元素,我想把它和向量的下一个元素进行比较 这是我的 Class Point{ public: float x,y; } //Somewhere in my code I do this vector<Point> points = line.getPoints(); foo (points.begin(),points.end()); 类点{ 公众: 浮动x,y; } //在我的代码中的某个地方我这样做 向量点=line.getPoints
Class Point{
public:
float x,y;
}
//Somewhere in my code I do this
vector<Point> points = line.getPoints();
foo (points.begin(),points.end());
类点{
公众:
浮动x,y;
}
//在我的代码中的某个地方我这样做
向量点=line.getPoints();
foo(points.begin(),points.end());
其中foo是:
void foo (Vector<Point>::iterator begin,Vector<Point>::iterator end)
{
std::Vector<Point>::iterator current = begin;
for(;current!=end-1;++current)
{
std::Vector<Point>::iterator next = current + 1;
//Compare between current and next.
}
}
void foo(向量::迭代器开始,向量::迭代器结束)
{
std::Vector::iterator current=begin;
对于(;当前!=end-1;++当前)
{
std::Vector::iterator next=current+1;
//比较当前和下一个。
}
}
我原以为这会奏效,但current+1
并没有给我向量的下一个元素
我认为operator+是正确的选择,但似乎不是这样。这方面有解决办法吗
谢谢
current+1
对随机访问迭代器(包括向量迭代器)有效,它是current之后的迭代器(即您认为它的功能)。检查(或发布!)您的比较代码,您可能在其中出错。current+1
对随机访问迭代器(包括向量迭代器)有效,它是current之后的迭代器(即您认为它的功能)。检查(或张贴!)比较代码,您可能在其中出错。std::vector
具有随机访问迭代器。这意味着它们基本上和指针一样通用。它们提供全面的指针算法(it+5
,it+=2
)和除以外的比较=代码>/==
(即,=
)
代码中迭代器之间的比较肯定会起作用,但毫无意义:
for(std::vector<Point>::iterator current = begin;current!=end-1;++current)
{
std::vector<Point>::iterator next = current + 1;
assert(current!=next); // always true
assert(current<next); // also always true
}
for(std::vector::iterator current=begin;current!=end-1;++current)
{
std::vector::iterator next=current+1;
断言(当前!=下一个);//始终为真
assert(当前std::vector
具有随机访问迭代器。这意味着它们基本上与指针一样通用。它们提供全面的指针算法(it+5
,it+=2
)和除!=
=
(即=/code>)之外的比较
代码中迭代器之间的比较肯定会起作用,但毫无意义:
for(std::vector<Point>::iterator current = begin;current!=end-1;++current)
{
std::vector<Point>::iterator next = current + 1;
assert(current!=next); // always true
assert(current<next); // also always true
}
for(std::vector::iterator current=begin;current!=end-1;++current)
{
std::vector::iterator next=current+1;
断言(当前!=下一个);//始终为真
assert(当前可能只是输入错误,但您的代码引用的是Vector
,而标准容器是Vector
(小写V)
但是,如果你的问题中没有输入错误,没有看到向量的定义,就无法判断它是什么意思。可能只是输入错误,但你的代码是指向量,而标准容器是向量(小写V)
但是,如果你的问题中没有输入错误,没有看到向量的定义,就无法判断它是什么意思。你能更详细地说明一下为什么你认为下一个不是指当前之后的元素吗?你能澄清一下“但是当前+1没有给我向量的下一个元素吗?”?只是一个小旁注:您需要说typename Vector::iterator begin
(和end
,和current
)。即使代码按原样编译,标准也不要求它。一般来说,只要你有class\u模板::some\u type obj
,你就必须在它前面加上typename
,以确保编译器理解some\u type
是一个类型而不是其他类型。@wilhelmtell:不,标准不要求这样,除非Point
是一个模板参数。TTBOMK、C++98甚至不允许您对非依赖类型使用typename
。(ISTR litb解释说C++03允许,但我不确定,而且至少有一个流行的当前编译器明确不允许。)@wilhelmtell-不正确。仅当类型依赖于另一个模板参数时,才需要使用typename。例如,template typename vector::iterator…
能否详细说明为什么您认为next
不是指当前之后的元素?能否澄清“但是current+1并没有给我向量的下一个元素。”?只是一个小小的旁注:您需要说typename vector::iterator begin
(和end
,和current
)。即使代码按原样编译,标准也不要求它。一般来说,只要你有class\u模板::some\u type obj
,你就必须在它前面加上typename
,以确保编译器理解some\u type
是一个类型而不是其他类型。@wilhelmtell:不,标准不要求这样,除非Point
是一个模板参数。TTBOMK、C++98甚至不允许您对非依赖类型使用typename
。(ISTR litb解释说C++03允许,但我不确定,而且至少有一个流行的当前编译器明确不允许。)@wilhelmtell-不正确。仅当类型依赖于另一个模板参数时,才需要使用typename。例如,template typename vector::iterator…
current不应指向此循环中的最后一个元素,尽管检查begin!=end
可能是正确的。@visitor:是的,你是对的。我复制了循环endi不看一眼就取消条件。
current不应该指向这个循环中的最后一个元素,尽管检查begin!=end
可能是正确的。@visor:是的,你说得对。我连看都没看就复制了循环的结束条件。
确实。解决方案是1)询问S.O,2)睡一会儿。确实。解决办法是:1)询问S.O.的情况,2)睡一会儿。