当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《STL算法中的begin(),end()烦恼》经验,为你挑选了3个好方法。

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

std::algorithm_name( container.begin(), container.end(), ..... )  

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

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



1> Schildmeijer..:

下一个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`仍然需要迭代器.

2> xtofl..:

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

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

参考文献:

RangeLib

CodeProject上

...


+1.还有Boost.Range:http://www.boost.org/doc/libs/1_38_0/libs/range/index.html

3> 小智..:
#define ALL(x) (x).begin(), (x).end()

sort(ALL(vec));


'cos宏多次评估他们的参数总是很有趣;-)
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有