Luc*_*cas 11 c++ stl readability
我目前正在开发一个需要尽可能少的外部依赖项的C++项目,因此我非常关注STL和Boost.到目前为止,在C++方面,我几乎完全生活在Qt-land.一般来说,我倾向于使用C#和Python.
今天我想检查是否std::vector
包含某个项目.有了Qt,我会这样做:
QList< int > list;
list.append( 1 );
list.append( 2 );
list.append( 3 );
if ( list.contains( 2 ) )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
很好,可读.但std::vector
没有contains
方法,这是一个惊喜.好的...这样的STL成语是什么?搜索周围,似乎是这样的:
std::vector< int > list;
list.push_back( 1 );
list.push_back( 2 );
list.push_back( 3 );
std::vector< int >::const_iterator result =
std::find( list.begin(), list.end(), 2 );
if ( result != list.end() )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
那(对我来说)难以理解,而且太冗长了.所以我发现自己编写了一个实用函数,它接受一个向量和一个值,并bool
根据是否找到值返回.基本上,模板化的contains()
方法; 上述std::find
调用的包装器.然后,我可以以类似于Qt示例的方式使用它.
我有几个类似的实用函数,它们可以包装其他STL惯用语,而不是其他原因,但可读性增加(感知).我想知道的是......这是一个坏主意吗?其他人也这样做吗?我错过了一些关键的东西吗 代码将在某一时刻成为OSS,而我宁愿做一些其他C++开发人员会觉得奇怪的特殊事物.
提升使它更整洁.我再也不会使用基于STL迭代器的算法了.基于范围的算法是一种更整洁的抽象,可以产生更清晰的代码.
#include <boost/range/algorithm/find.hpp>
void foo(){
std::vector<int> list;
...
...
boost::find(list, 2) != list.end()
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
659 次 |
最近记录: |