STL算法中的begin(),end()烦恼

bay*_*yda 16 c++ algorithm stl

我喜欢STL算法,而更喜欢使用算法而不是通常的循环.
几乎所有STL算法通常用作:

std::algorithm_name( container.begin(), container.end(), ..... )  
Run Code Online (Sandbox Code Playgroud)

container.begin(), container.end() - 是我项目中最受欢迎的单词之一.

有没有人有同样的问题?
你是怎么解决这个问题的?
您有什么建议可以避免这种重复?我看到了几种解决方法,但它们都有不同的限制(宏使用,与通常的指针不兼容等).

Sch*_*jer 28

下一个C++标准,C++ 0X(其中X代表,希望是9)将增加从迭代器角度到容器角度的可能性.你将能够做到例如.

的std ::排序(my_vec);

如果你不能等待,我会建议你看看:Boost.Range

如果你对迭代器/范围真的很感兴趣,我建议你阅读Andrei的" 迭代器必须去 "

  • `std :: sort(my_vec)`真的进入了C++ 11标准吗?根据http://en.cppreference.com/w/cpp/algorithm/sort,似乎`std :: sort`仍然需要迭代器. (6认同)

xto*_*ofl 19

许多人遇到了这种麻烦.尽管迭代器概念非常普遍,但它缺乏一些可用性.

输入'范围'概念.最好避免任何代码重复.因此,如果您在整个代码中遇到.begin()和.end(),那么最好在'iterator-getting'和实际算法之间创建一个层.

参考文献:

...

  • +1.还有Boost.Range:http://www.boost.org/doc/libs/1_38_0/libs/range/index.html (2认同)

小智 7

#define ALL(x) (x).begin(), (x).end()

sort(ALL(vec));
Run Code Online (Sandbox Code Playgroud)

  • 'cos宏多次评估他们的参数总是很有趣;-) (12认同)