<div>template <typename Iterator></div> <div>inline bool next_combination(const Iterator first, Iterator k, const Iterator last)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if ((first == last) || (first == k) || (last == k))</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return false;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>Iterator itr1 = first;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>Iterator itr2 = last;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++itr1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (last == itr1)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return false;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>itr1 = last;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>--itr1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>itr1 = k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>--itr2;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (first != itr1)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (*--itr1 < *itr2)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>Iterator j = k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (!(*itr1 < *j)) ++j;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>std::iter_swap(itr1, j);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++itr1;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++j;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>itr2 = k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>std::rotate(itr1, j, last);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (last != j)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++j;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++itr2;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>std::rotate(k, itr2, last);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return true;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span> std::rotate(first, k, last);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return false;</div> <div>}</div> <div>template<class Iterator></div> <div>bool next_permutation(Iterator first, Iterator mid, Iterator last)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>std::reverse(mid, last);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return std::next_permutation(first, last);</div> <div>}</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.