c++ - 用迭代器修改容器的内容

标签 c++ c++11 vector iterator

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

*(it + 1)++;

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

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

与上一行相差三行,我认为这是一个 hack。有一个更好的方法吗?我缺少能够递增 vector 中的下一个元素的技巧是什么?

最佳答案

你的意思是:

(*(it + 1))++;

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

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

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

关于c++ - 用迭代器修改容器的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26210655/

相关文章:

java - 在黑白图像上查找未连接区域(岛屿)的算法

c++ - 在 g++ 4.4.3 上得到负 NaN,这是标准吗?

C++11 constexpr 可变逻辑表达式

c++11 - 如何向 Code::Blocks 编译器添加 C++11 支持?

c++ - 使用 std::ostream 打印 vector

c++ - GCC:为什么一行代码中的错误(字符串和 NULL 的比较)会导致一长串错误消息?

c++ - C++ 中的 cast 属性

c++ - 如何使 qtcreator 与 c++11 一起工作

c++ - 使用花括号初始化 std::vector 使用初始值设定项列表

c++ - 从 ifstream 文件读取给出错误的大小