iterator的使用和封个问题

Posted 笨鸟居士的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iterator的使用和封个问题相关的知识,希望对你有一定的参考价值。

这篇文章的内容还是不错的:

http://www.cnblogs.com/zhuyf87/archive/2012/12/08/2808290.html

 

for (vector<int>::iterator i = v.begin(); i < v.end(); i++) {
  cout << *i << endl;
}

 

这个循环本身没有明显错误,存在的只是一些风格上的问题。

(1)尽量做到const正确性。如果迭代器没有用来修改vector中的元素,应该改用const_iterator。

(2)尽量使用“!=”而不是“<”来比较两个迭代器。因为“<”只对随机访问迭代器有效(例如,std::list的迭代器并不支持“<”),而“!=”对于任何迭代器都有效。所以应该把使用“!=”比较迭代器作为日常惯例。

(3)尽量使用前缀“--i”和“++i”。除非真的需要用到i原来的值。

(4)避免无谓的重复求值。本例中v.end()的返回值在整个循环中不会改变,因此应当在循环之前预先将v.end()求出来。

(5)尽量使用“\\n”而不是“endl”。使用endl会迫使输出流刷新其内部缓冲区,可以在整个循环结束之后写一行刷新语句。

(6)尽量使用标准库中的copy()和for_each()来代替手写循环,这样可以使代码变得更干净简洁。

copy(v.begin(), v.end(), ostream_iterator<int>(cout, “\\n”);

此外,使用copy(),前面关于!=、++、end()和endl的问题也就不用操心了。

 

 
 

 

以上是关于iterator的使用和封个问题的主要内容,如果未能解决你的问题,请参考以下文章

未来不返回任何东西

RecursiveDirectoryIterator() 不显示空目录

ArrayUtil-将集合按指定个数分为多个集合

操作 Java 泛型:泛型在继承方面体现与通配符使用

C++中的QHashIterator

如何在 SuperpixelSLIC 中查找段的唯一标签