在这种实现的情况下,用const_cast把const_iterator映射成iterator当然可以编译而且没有问 题,因为const_iterator与iterator之间的const_cast映射被最终解释成const T*到T*的映射。但是,即使是在这种实现中,reverse_iterator和const_reverse_iterator也是真正的类,所以你仍 然不能直接用const_cast把const_reverse_iterator...
并不存在从 const_iterator 到 iterator 之间的隐式转换 一种安全的、可移植的方法获取他所对应的 iterator: 1typedef deque<int> IntDeque;//方便的typedef2typedef IntDeque::iterator Iter;3typedef IntDeque::const_iterator ConstIter;45InDeque d;6ConstIter ci;7. . .8Iter i( d.begin() );//初始...
STL中的容器类(Container)一般提供了4个迭代器:iterator、const_iterator、reverse_iterator、const_reverse_iterator,对于 container<T> 而言,其中 const_iterator 相当于 const T *,const_iterator 指向的元素不能做修改操作。 STL 容器的 begin() 和 end() 默认都提供了 iterator 和 const_iterator 的迭代器,相...
就这种实现而言,vector<T>::iterator是T*的typedef,而vector<T>::const_iterator是const T*的typedef,string::iterator是char*的typedef,而string::const_iterator是const char*的typedef。在这种实现的情况下,用const_cast把const_iterator映射成iterator当然可以编译而且没有问题,因为const_iterator与iterator之间的cons...
ConstIter ci; 使用强制转换 i = (const_cast<Iter>(ci)) 会造成编译错误,不能将const_iterator强制转换成iterator。 在STL中,正确的转换方法是: i =vi.begin(); advance(i, distance<ConstIter>(i,ci) ); 这种方法非常简单和直接。为了得到一个与const_iterator指向相同位置的iterator,首先创建一个新的ite...
错误原因vs已经提醒的很清楚了:无法将const_iterator转换为iterator 我的出错代码是这样的 思考了很久,最后发现原来是因为将函数定义为const的缘故。 总结:当将函数定义为const后,编译器对代码的编译要求立马就搞了起来