zoukankan      html  css  js  c++  java
  • 从erase()谈起

    面试中,因为我说自己熟悉C++,就问我一个问题,Vector<int>里, 想把元素为2的节点删除掉。该怎么做。

    我已经很久没有用Vector了,但是只有硬着头皮想一下,第一个想起的是remove能删除节点,但是不是真正的删除,还需要erase.

    但是因为Vector是顺序存储的数据结构,我觉得,一个节点删除掉后,会产生数据结构重新整合,会把这个节点挨个复制到前一个节点上。

    这样我提出两个方案,一个,使用反向迭代器,从后面向前面遍历,遍历判定条件后将节点删除。第二个,或者使用pop_back,从后面pop出元素,如果是符合条件的,就丢弃掉,剩余的放到一个先进后出容器里,

    然后再把这个容器转换成Vector.

    答案是,Vector的迭代器,不支持删除的erase使用反向迭代器,但是对于失效,只要下一次执行,使用erase返回的迭代器进行使用就可以了。

    我的方法反映了我对数据结构有一定的认识,也比较符合Vector的实际情况,但是对Vector不够熟练,尤其是代码,对stl特定的解决方法,并不够熟悉。

    因为是面试,点到为止了。哎,技艺不够精啊。有空我看看stl的源代码分析分析。

  • 相关阅读:
    洛谷-P5357-【模板】AC自动机(二次加强版)
    洛谷-P3796-【模板】AC自动机(加强版)
    洛谷-P3808-【模板】AC自动机(简单版)
    2020 CCPC Wannafly Winter Camp Day2-K-破忒头的匿名信
    zabbix的搭建
    playbook 介绍
    ansible 模块
    shell 脚本判断ip
    shell 脚本安装lnmp
    expect 介绍
  • 原文地址:https://www.cnblogs.com/ender-cd/p/4505647.html
Copyright © 2011-2022 走看看