使用迭代器修改容器的内容

Modifying contents of container with iterator

本文关键字:修改 迭代器      更新时间:2023-10-16

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

*(it + 1)++;

这对我来说是有意义的,因为我已经能够使用条件it != vec.end() - 1告诉循环在结束前停止一个循环。不过,它似乎对容器的内容没有任何影响,所以我决定使用以下内容:

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

这是前一行的三行,我认为这是一个黑客。有更好的方法吗?我错过了什么技巧来增加向量中的下一个元素?

您的意思是:

(*(it + 1))++;

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

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

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

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

(*(it + 1))++;

*(it + 1) += 1;