首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用什么STL函数来替换"while (var != nullptr)“循环?

我可以使用什么STL函数来替换"while (var != nullptr)“循环?
EN

Stack Overflow用户
提问于 2022-08-23 14:00:47
回答 1查看 134关注 0票数 3

在“C++ Core Guidelines Explained: Best Practices for Modern C++”一书中有一句名言:

在现代C++中有一句谚语:“当您使用显式循环时,您不知道STL的算法。”

目前,我正在编写一个程序,该程序使用显式for循环,它在每次迭代中更改由变量指向的对象,直到它指向nullptr为止。

代码语言:javascript
复制
    for(auto object = get_object(arg);object != nullptr;object = get_object_next(arg)) {
       if (condition) {
         vector_of_objects.push_back(object);
       }
    }

什么STL函数比显式的for循环更适合这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-23 14:24:46

算法最终建立在迭代器上。你的循环不是。因此,没有算法对其进行拟合。

现在,如果您经常使用这个特定的get_object/get_object_next接口,那么开发迭代器/范围版本可能是值得的。这大概是某种形式的InputIterator/范围。迭代器将存储arg和当前对象。++将用get_object_next(arg)替换当前对象。它是一个非常简单的接口,C++20概念系统使得编写符合标准的迭代器比以往任何时候都容易(至少很容易检查它是否是有效的std::input_iterator)。

但是,如果您只有几个地方使用这些循环,这可能是不值得的。

当然,“几个地方”和“经常使用”是可以随时间变化的状态。因此,如果您认为range/iterator接口可能经常使用,那么提供它可能是值得的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73460136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档