并不存在从 const_iterator 到 iterator 之间的隐式转换
一种安全的、可移植的方法获取他所对应的 iterator:
1 typedef deque<int> IntDeque; // 方便的typedef 2 typedef IntDeque::iterator Iter; 3 typedef IntDeque::const_iterator ConstIter; 4 5 InDeque d; 6 ConstIter ci; 7 . . . 8 Iter i( d.begin() ); // 初始化 i 为 d.begin() 9 advance( i, distance(i, ci) ); // 把 i 移到指向 ci 的位置
要得到与 const_iterator 指向同一位置的 iterator,首先将 iterator 指向容器的起始位置,然后把它向前移到和 const_iterator 距离容器起始位置的偏移量一样的位置即可。
这个任务得到两个函数模板 advance 和 distance 的帮助,他们都在<iterator>中声明
distance 返回两个指针指向同一个容器的 iterator 之间的距离,
advance 则用于将一个 iterator 移动到指定的距离,
如果i和ci指向同一个容器,表达式advance(i, distance(i, ci))会将i移动到与 ci 相同的位置
显示的指明 distance 调用的模板参数类型
1 advance( i, distance<ConstIter>(i, ci) );