每当有人开始使用 STL 并且他们有一个向量时,您通常会看到:
vector<int> vec ;
//... code ...
for( vector<int>::iterator iter = vec.begin() ;
iter != vec.end() ;
++iter )
{
// do stuff
}
我只是发现整个vector<int>::iterator
语法令人作呕。我知道你可以typedef vector<int>::iterator VecIterInt
, 然后is稍微好一些..
但问题是,好的 ol' 有什么问题:
for( int i = 0 ; i < vec.size() ; i++ )
{
// code
}
当你使用索引来执行本质上顺序的访问容器(std::vector
或其他任何东西)你正在强加随机访问对底层数据结构的要求,而实际上您在算法中不需要这种访问。随机访问与明显较弱的要求相比,要求是相当强的要求顺序存取。在没有充分理由的情况下强加更严格的要求是一个重大的设计错误。
因此,您问题的正确答案是:尽可能使用顺序(迭代器)访问,仅在绝对必要时才使用随机(索引)访问。尽可能避免索引访问。
如果您的算法严重依赖于容器随机访问,成为算法的外部要求。在这种情况下,您可以毫无保留地使用索引访问。但是,如果可以仅使用迭代器来实现相同的算法,那么最好只使用迭代器,即完全依赖顺序访问。
当然,上述规则虽然正确,但只有在代码中才有意义generic在一定程度上。如果代码的其他部分是这样specific,您确信您正在使用的数据结构是std::vector
并将永远是一个std::vector
,那么访问方法就不再重要了。使用您喜欢的任何东西。但是,在顺序访问完全足够的情况下,我仍然会避免索引访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)