过滤范围与继续,我应该更喜欢哪一个?

问题描述 投票:0回答:1

我使用范围已经有一段时间了,每次使用过滤时,我都会想到它可以轻松地用普通的旧

continue
语句替换。考虑这些代码片段:

for (auto value : values | ranges::views::filtered([](auto value) { ... })) {
    ...
}

for (auto value : values) {
    if (...) continue;
}

对我来说,第二个选项看起来更具可读性。此外,第一个选项可能会涉及一些额外的调用开销。那么为什么我更喜欢过滤呢?是否有一些关于我何时应该选择其中之一的指南?

c++ loops range continue
1个回答
0
投票

第二个版本更容易阅读,与旧的 C++ 标准兼容,并且不分配和构建临时过滤列表。它执行相同数量的过滤测试,并且仅迭代原始列表一次,而第一个版本迭代原始列表和临时过滤的列表。

第一个版本的优势为零。你的想法很好,随着最近的 C++ 功能,人们往往会过度思考并导致迭代膨胀。

© www.soinside.com 2019 - 2024. All rights reserved.