gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:00:28 24 4
gpt4 key购买 nike

我目前正在开发一个需要尽可能少的外部依赖项的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com