Jump to content

Range consolidation: Difference between revisions

m
Efficiency improvement
m (Efficiency improvement)
m (Efficiency improvement)
Line 317:
}
 
// Merges a range of ranges in-place. Returns an iterator to the
// end of the resulting range, similarly to std::remove.
template <typename iterator>
iterator merge_ranges(iterator begin, iterator end) {
for (iterator iout = begin; i != end; ++i) {
for (iterator i = begin; i != end; ) {
iterator j = i;
intwhile count(++j != 0;end && j->first <= i->second)
while (++j != end && j->first <= i->second) {
i->second = std::max(i->second, j->second);
*out++ = ++count*i;
}i = j;
if (count > 0) {
iterator k = i;
std::move(j, end, ++k);
std::advance(end, -count);
}
}
return endout;
}
 
1,777

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.