zoukankan      html  css  js  c++  java
  • const_iterator 转成 iterator 的方法

    vector<int> vi;
    typedef vector<int>::iterator Iter;
    typedef vector<int>::const_iterator ConstIter;
    Iter i;
    ConstIter ci;
    使用强制转换 i = (const_cast<Iter>(ci)) 会造成编译错误,不能将const_iterator强制转换成iterator。
    在STL中,正确的转换方法是:
    i = vi.begin();
    advance(i, distance<ConstIter>(i,ci) );
    这种方法非常简单和直接。为了得到一个与const_iterator指向相同位置的iterator,首先创建一个新的iterator,将它指向容器初始位置,然后取得const_iterator距离容器起始位置的偏移量,并将iterator向前移动相同的偏移量即可。
    其中,advance和distance都在<iterator>头文件中。distance用来计算两个迭代器之间的距离,advance用来将一个迭代器移动指定的距离。
    对于随机访问的迭代器(vector、string、deque),这种方法的时间是常数时间。对于双向迭代器(unordered_map)而言,时间是线性的。
  • 相关阅读:
    260.java风格简介
    259.Java标识符和注释
    258.计算机网络的性能指标
    257.计算机网络的组成
    256.常见的网络拓扑结构
    HDFS文件的读写流程入门学习
    Servlet入门
    Linux下扩展根分区-非LVM
    Tomcat基本使用
    JDBC入门
  • 原文地址:https://www.cnblogs.com/ladawn/p/8320516.html
Copyright © 2011-2022 走看看