zoukankan      html  css  js  c++  java
  • [C++]关于vector迭代器失效及其处理办法

    容器操作可能使迭代器失效

    向容器中添加或者删除元素的操作可能使指向容器的指针、引用、迭代器失效。一个失效的指针、引用、迭代器将不再表示任何元素。

    • 在向容器添加元素后,如果储存空间未重新分配,指向插入位置之前的元素的迭代器、指针、引用有效,但指向插入位置之后的将会失效。
    • 在从容器删除元素之后,指向被删元素之前元素的迭代器、引用、指针仍有效。尾后迭代器也就失效。

    所以对容器进行操作之后,对迭代器需要更新。

    两种例子:

    1. 遍历时插入元素

        iter=v.insert(iter,*iter);//想要指向下一个元素,就要跳过当前和被添加的元素

        iter+=2;

      2.   遍历时删除元素

        注意:erase函数返回的就是删除之后的元素的迭代器

        iter=iter.erase(iter);


    题目描述:Remove Duplicates from Sorted Array

    Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

    题目来源:leetcode

    全部代码:

     1 class Solution {
     2 public:
     3     int removeDuplicates(vector<int>& nums) {
     4         vector<int>::iterator itor=nums.begin();
     5         while(itor+1!=nums.end()&&itor!=nums.end())
     6         {
     7             if(*(itor+1)==*itor) 
     8             itor=nums.erase(itor);
     9             else ++itor;
    10         }
    11         return nums.size();
    12     }
    13 };
    原创供学习参考使用,转载请注明出处http://www.cnblogs.com/cuphoria/ @jm_epiphany
  • 相关阅读:
    Server SQL Modes
    Java 8 New Features
    Spring Boot 企业级应用开发实战 刘伟东-2018年3月第一版
    一步一步学Spring Boot 2 微服务项目实战
    Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷
    深圳宝安图书馆官网错误 HTTP Status 500
    Springboot
    linux 操作 mysql 指定端口登录 以及启动 停止
    PHP 基础
    Magento 总结
  • 原文地址:https://www.cnblogs.com/cuphoria/p/9609619.html
Copyright © 2011-2022 走看看