繁体   English   中英

我可以用什么 STL function 来替换“while (var?= nullptr)”循环?

[英]What STL function can I use to replace "while (var != nullptr)" loop?

在书中C++ Core Guidelines Explained: Best Practices for Modern C++有一个引用:

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

我现在正在编写一个程序,它使用显式的 for 循环,改变每次迭代中变量指向的 object ,直到它指向nullptr

    for(auto object = get_object(arg);object != nullptr;object = get_object_next(arg)) {
       if (condition) {
         vector_of_objects.push_back(object);
       }
    }

什么 STL function 比显式 for 循环更适合这个?

算法最终建立在迭代器之上。 你的循环不是。 因此,没有适合它的算法。

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

但是如果你只有几个地方使用这些循环,那可能就不值得了。

当然,“几个地方”和“经常使用”是可以随时间变化的状态。 因此,如果您认为它可能会被频繁使用,那么提供一个范围/迭代器接口可能是值得的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM