![]() |
1
13
您可以使用find_if算法,它将停止并返回迭代器,其中应用于迭代器元素的谓词条件返回true。因此,应该更改谓词以返回布尔值作为Continue/Break条件。 然而,这是一个黑客,所以你可以使用算法。 另一种方法是使用Boost-ForEach。 |
![]() |
2
20
您可以使用std::any_of(或std::all_of或std::none_of),例如:
然而,这是一个浪费的解决方案(返回值实际上不用于任何事情),最好编写自己的循环。 |
![]() |
3
14
通过从函数中抛出异常,可以从for each()中断。然而,这通常不是一个好主意,而且还有其他选择。 您可以在函数中保留状态。如果检测到“中断”条件,只需在函数中设置一个标志,然后对于每个后续迭代,只需返回而不执行函数的操作。显然,这不会停止迭代,这对于大型集合来说可能很昂贵,但它至少会停止正在执行的工作。 如果对集合进行了排序,则可以查找()要在其处中断的元素,然后从begin()到返回的element find()对每个元素执行此操作。
最后,您可以实现
|
![]() |
4
6
如果您想在条件不满足的情况下执行一些操作,可能需要对类似的内容执行更改算法
|
![]() |
5
4
正如其他人所展示的,只有在解决方法使代码变得模糊的情况下才能实现。 因此,我的建议是将for-each改为正则for循环。这将使您使用break的其他人更容易看到它(甚至可能继续)。 |
![]() |
6
2
除非抛出异常,否则无法执行此操作,这不是一个好主意,因为不执行带有异常的流控制。 更新:很明显Boost有一个for-each-u 可以 救命,但你没有使用助推器。 |
![]() |
7
0
你提出了一个例外。这是否是一个好主意是一个风格问题,佩斯@丹,但可能更多的是你的设计问题。for_每个函数都是一种函数式编程风格,它隐式地假设您的函数可以在整个集合中统一应用。所以,如果你 做 需要打破,这可能是一个不寻常的情况,因此值得一个例外。 另一个解决方案,以及一个更“实用”的解决方案,是编写您的函数,这样如果它不应该对某些应用程序产生影响,那么就编写它来不产生任何影响。例如,如果你有一个求和函数,让它在你“破坏”的情况下加0。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |