c++ - 包装 STL 习惯用法以提高可读性是个好主意吗?

标签 c++ stl readability

我目前正在开发一个需要尽可能少的外部依赖项的 C++ 项目,因此我几乎坚持使用 STL 和 Boost。直到现在,当涉及到 C++ 时,我几乎一直生活在 Qt 领域。一般来说,我倾向于尽可能使用 C# 和 Python。

今天我想检查 std::vector 是否包含某个项目。使用 Qt,我会这样做:

QList< int > list;
list.append( 1 );
list.append( 2 );
list.append( 3 );

if ( list.contains( 2 ) )
{
    // do something
}

美观易读。但是 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
}

(对我而言)这很难读,而且过于冗长。所以我发现自己编写了一个实用函数,它接受一个 vector 和一个值,并根据是否找到该值返回 bool 。基本上,一个模板化的 contains() 方法;上述 std::find 调用的包装器。然后我可以以类似于 Qt 示例的方式使用它。

我有几个类似的实用函数,它们会包装其他 STL 习语,除了(感知到的)可读性增加外,没有其他原因。我想知道的是……这是个坏主意吗?其他人也这样做吗?我错过了一些重要的东西吗?代码在某一时刻将是 OSS,我宁愿不做一些其他 C++ 开发人员会觉得奇怪的特殊事情。

最佳答案

boost 使它更整洁。我从不使用STL 不再基于迭代器的算法。范围 基于算法是一个更简洁的抽象 并产生更简洁的代码。

#include <boost/range/algorithm/find.hpp>

void foo(){
    std::vector<int> list;
    ...
    ...
    boost::find(list, 2) != list.end()
}

关于c++ - 包装 STL 习惯用法以提高可读性是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365340/

相关文章:

python - 为返回对象层次结构的函数编写单元测试

c++ - Android NDK 应用构建但不运行

c++ - sprintf(buf, "%.20g", x)//buf应该多大?

堆栈上的 C++ 流多态性?

c++ - 作为键的 vector 如何在 C++ 内部工作?

python - 增加数组元素测试的表现力

c++ - 使用 Boost.Polygon 对曼哈顿多边形进行切片

c++ - 为什么运算符有时是独立的,有时是类方法?

java - Java 数组中的最大元素(整数数组 int[] 的 Collections.max())

rust - 如何将 "x-y"翻译成 vec![x, x+1, … y-1, y]?