2014-10-06 97 views
0

我有一个向量,我正在使用迭代器修改它的内容。如果满足某些条件,我需要修改向量中下一个元素的内容。我认为,以下将工作:使用迭代器修改容器的内容

*(it + 1)++; 

这对我有意义,因为我已经能够告诉循环停止使用条件it != vec.end() - 1结束的一个短。它似乎并没有对容器的内容有任何效果的,所以我在下面解决:

++it; 
*it += 1; 
--it; 

这三条线与前一个,我认为这是一个黑客。有一个更好的方法吗?我错过了能够增加矢量中下一个元素的诀窍是什么?

回答

2

你的意思是:

(*(it + 1))++; 

++*(it + 1).这是一个优先发布,类似于如何*p++递增指针,而不是指向的值。

或者,对于随机访问迭代器,您可以编写it[1]++;++it[1];

除非您需要后增量的属性,否则通常最好使用预增量。这是因为后增量按值返回,所以如果对象的拷贝过程昂贵,但实际上并不需要拷贝,那么你就浪费了拷贝的时间。

+0

你赢得了速度竞赛。 :)也考虑到'++ *(it + 1)'的作品,并且更简洁明了。 – 2014-10-06 05:56:01

+0

@JohnZwinck增加,ty – 2014-10-06 05:57:22

+0

在这种情况下,对象只是整数,但我会记住前/后增量。 – 2014-10-06 06:00:43

1

您正在创建一个指针并将其递增。 取消引用迭代器,然后递增。

(*(it + 1))++; 

*(it + 1) += 1;