C++中w.erase(unique_copy(...))的参数迭代器指向何处?
关于C++ unique_copy返回迭代器的位置说明
首先明确:std::unique_copy的作用是将输入序列中连续重复的元素仅保留一份,复制到目标容器的起始位置(这里是w.begin()),它返回的迭代器指向目标容器中最后一个被复制的有效元素的下一个位置。
结合你给出的代码具体分析:
- 原容器
v的元素序列是:1,1,2,2,2,3,4,4,3,3,2 - 经过
unique_copy处理后,复制到w中的元素是连续去重后的结果:1,2,3,4,3,2(注意:非连续的重复元素不会被去重,比如后面的3和前面的3、后面的2和前面的2,因为它们不连续) - 此时
unique_copy返回的迭代器,指向w中2(最后一个有效复制元素)的下一个位置,也就是w的第6个元素的位置(容器索引从0开始,对应索引为6的位置)
再看w.erase(unique_copy(...)):vector::erase的单参数版本会删除从该迭代器位置到容器末尾的所有元素。因为w初始是大小为8的容器,默认填充了0,复制后前6位是有效元素,后两位还是0;调用erase后,这两个0被删除,最终w的元素就是1 2 3 4 3 2,对应循环输出的内容。
内容的提问来源于stack exchange,提问作者Mathiem
相关产品推荐
相关产品推荐

