【发布时间】:2015-01-09 13:12:52
【问题描述】:
所以我真的很挣扎,即使现在我对我的解决方案也不满意。
我有一个至少包含 0 的set,并且可能包含其他正数ints。我需要在set中找到第一个正数not。
所以编写一个标准的while-loop 来完成这个很容易。
i = foo.begin();
while (i != prev(foo.end()) && *i + 1 == *next(i)){
++i;
}
cout << "First number that cannot be formed " << *i + 1 << endl;
但是当我尝试编写循环的 STL 算法版本时,我得到了一些失败的东西,比如这个循环:
auto i = foo.begin();
while (++i != prev(foo.end()) && *prev(i) + 1 == *i);
cout << "First number that cannot be formed " << *prev(i) + 1 << endl;
在以下情况下,这两个循环都正确产生 3:
set<int> foo{0, 1, 2, 4};
但在这种情况下,第二个循环错误地产生了 3 而不是 4:
set<int> foo{0, 1, 2, 3};
如何使用 STL 算法编写此代码并完成第一个循环的行为?
编辑:
看到一些答案后,我想增加难度。我真正想要的是不需要临时变量并且可以放在cout 语句中的东西。
【问题讨论】:
标签: c++ loops stl set stl-algorithm