Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > разделить std::list на N равных частей |
Автор: mrgloom 21.9.2011, 11:03 |
как разделить std::list на N равных частей? а конкретней list<pair<vector<data1>,data2>> надо разделить на N равных частей и записать в vector<list<pair<vector<data1>,data2>>> |
Автор: mes 21.9.2011, 13:42 |
а в чем проблема то ? в том что равные не всегда получается ? так это и не всегда возможно.. или в том как сделать одной функцией ? так таких стандартных алгоритмов нет, нужно самому в цикле по каждому кусочку переносить.. |
Автор: borisbn 21.9.2011, 15:21 | ||
Псевдокод
|
Автор: newbee 21.9.2011, 16:14 | ||||
Нашла в загашнике)
Добавлено @ 16:15 Вызывать судя по всему так: split(someList,amountOfPieces); Добавлено @ 16:25
И сразу патч для защиты от бестолкового пользователя кода. |
Автор: mes 21.9.2011, 16:45 |
а если обойтись только целочисленными типами ? Добавлено @ 16:48 сразу видно newbee писалa, рекурсия в деле ![]() |
Автор: newbee 21.9.2011, 16:51 |
Тот патч закрывает возможность зациклить выполнение функции, когда аргумент split/size станет равным нулю. А если ты имеешь ввиду использовать целочисленное деление вместо округления... Я не помню, там вроде как-то криво список резался. Не стесняйся, присылай правильный патч с целыми числами) Добавлено через 2 минуты и 41 секунду ![]() |
Автор: mes 21.9.2011, 17:02 | ||||
ага
|
Автор: newbee 21.9.2011, 17:12 | ||
mkey. Тогда вот вариант интерфейсной функции. Стало намного проще, а cmath выпал из зависимостей )
Добавлено через 44 секунды И никакого дублирования кода с непонятными циклами))) |
Автор: maxim1000 21.9.2011, 22:23 | ||
|
Автор: mes 21.9.2011, 23:30 |
или, если разброс элементов нежелателен, заменить взятие остатка делением на кол-во элементов в группе (формула приведена выше).. |
Автор: volatile 22.9.2011, 01:31 | ||||
Еще вариант
Исходный список после операции, соответственно опустошается. В памяти элементы остаются на местах, т.е. не копируются вообще. Добавлено @ 01:34 Вызывать примерно так:
|
Автор: mrgloom 22.9.2011, 09:49 |
вот хорошо коротко красиво. |