长期做 vs 下的 c++。对 gnu 平台和非 gnu 平台的 stl 不是很了解。最近在看一“大神”写的代码,这大神刚好把一个 map 的迭代器保存为类成员当作游标来用,当然这个类也会去 erase 和 insert。
于是就回忆道,早在很早以前找工作,面试时遇到过一个大哥问过,迭代器是否可以作为某个类成员保存起来用。
因为这个问题的比较泛,当时我也看过侯捷的 stl 书,我知道迭代器即便要当作游标来用,也要看情况的,如果容器一般是不行的( vector 为啥不行就不多说了,list 的话,vs2015 上试了一下不行),因为是线性表或类线性。关联器是可以的。
具体原因我忘记的差不多了,隐约记得:
容器的迭代表征的是一个具体的位置,关联器表征的是一个逻辑位置。具体的内容还在跟踪代码回忆中(反正 vs 里面的 stl 代码不是那么容易阅读的,看看也无妨)。
有没有什么具体的资料和或者网站,可以快速查找,各方言版本的 stl 差异(说各个方言版本是指,各个厂商实现的 c++和 stl 都存在一些差异,有些比较细微)。
于是就回忆道,早在很早以前找工作,面试时遇到过一个大哥问过,迭代器是否可以作为某个类成员保存起来用。
因为这个问题的比较泛,当时我也看过侯捷的 stl 书,我知道迭代器即便要当作游标来用,也要看情况的,如果容器一般是不行的( vector 为啥不行就不多说了,list 的话,vs2015 上试了一下不行),因为是线性表或类线性。关联器是可以的。
具体原因我忘记的差不多了,隐约记得:
容器的迭代表征的是一个具体的位置,关联器表征的是一个逻辑位置。具体的内容还在跟踪代码回忆中(反正 vs 里面的 stl 代码不是那么容易阅读的,看看也无妨)。
有没有什么具体的资料和或者网站,可以快速查找,各方言版本的 stl 差异(说各个方言版本是指,各个厂商实现的 c++和 stl 都存在一些差异,有些比较细微)。