Вот как выглядит строка:
Код: Выделить всё
struct line {
int begin, width;
int end() const { return begin + width; }
};

Это одно из возможных решений проблемы:
Код: Выделить всё
auto removeOverlap(std::pair input)
{
// keeps first line untouched and shifts the second line to the end of the first one, if necessary
return std::pair{std::get(input), {std::max(std::get(input).end(), std::get(input).begin), std::get(input).width}};
}
int main(int argc, char *argv[])
{
std::array lines{{{0,3},{1,2},{5,1}}};
for(int i = 0; i < lines.size()-1; ++i)
{
std::tie(lines[i], lines[i+1]) = removeOverlap(std::make_pair(lines[i], lines[i+1]));
}
assert(lines[0].begin == 0);
assert(lines[1].begin == 3);
assert(lines[2].begin == 5);
Я подумываю об использовании модифицированный view::chunk(N), в котором размер приращения равен 1 (вместо N). Но я правда не знаю, как с этой точки зрения поступить.
Подробнее здесь: https://stackoverflow.com/questions/426 ... h-range-v3
Мобильная версия