gpt4 book ai didi

c++ - 如何使用 C++ 避免其中包含 "for"条件的 "if"循环?

转载 作者:IT老高 更新时间:2023-10-28 11:52:20 25 4
gpt4 key购买 nike

对于我编写的几乎所有代码,我经常处理集合上的集合缩减问题,这些问题最终会在它们内部出现天真的“if”条件。这是一个简单的例子:

for(int i=0; i<myCollection.size(); i++)
{
if (myCollection[i] == SOMETHING)
{
DoStuff();
}
}

使用函数式语言,我可以通过将集合简化为另一个集合(轻松)来解决问题,然后在我的简化集合上执行所有操作。在伪代码中:

newCollection <- myCollection where <x=true
map DoStuff newCollection

在其他 C 变体中,比如 C#,我可以使用 where 子句来减少

foreach (var x in myCollection.Where(c=> c == SOMETHING)) 
{
DoStuff();
}

或者更好(至少在我看来)

myCollection.Where(c=>c == Something).ToList().ForEach(d=> DoStuff(d));

诚然,我正在做很多范式混合和基于主观/意见的风格,但我不禁觉得我错过了一些真正基本的东西,可以让我在 C++ 中使用这种首选技术。有人可以启发我吗?

最佳答案

恕我直言,使用带有 if 的 for 循环更直接且更具可读性。但是,如果这对您来说很烦人,您可以使用如下所示的 for_each_if:

template<typename Iter, typename Pred, typename Op> 
void for_each_if(Iter first, Iter last, Pred p, Op op) {
while(first != last) {
if (p(*first)) op(*first);
++first;
}
}

用例:

std::vector<int> v {10, 2, 10, 3};
for_each_if(v.begin(), v.end(), [](int i){ return i > 5; }, [](int &i){ ++i; });

Live Demo

关于c++ - 如何使用 C++ 避免其中包含 "for"条件的 "if"循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399334/

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