|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
||||||
Перенести элементы из одного вектора в другой21.06.2019, 19:10. Показов 7572. Ответов 47
Я не могу понять, почему если убрать erase и else ++k , то выборка элементов из первого массива работает,как надо, но при таких условиях я не смогу удалить из начального passengers уже использованные пути пользователей. Если же оставить как есть, то он переносит в массив active_users не только нужные, но и лишние элементы, не соответствующие условиям в скобках. Поясню. Я выбираю по задачае только те элементы, где при направлении вверх, этаж назначения больше этажа отправления и наоборот для направления вниз. Но при данной реализации erase у меня могут выбраться и лишние, т.е. для движения вверх он перенесет часть пользователей, которым надо вниз из passengers в active_users. Понятно, что ошибка в вычислениях моих, но где я не увидел? Даже вложил файл с полным кодом.
0
|
||||||
| 21.06.2019, 19:10 | |
|
Ответы с готовыми решениями:
47
Перенести элементы одного вектора в другой Как перенести элементы из одного массива в другой? Перенести все кратные 5 элементы из одного массива в другой |
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|
| 21.06.2019, 21:14 [ТС] | |
|
Ну код я тот кидал, нет других, но кину еще раз. Единственное, что я мог спецом erase и итератор на passengers комментировать и наоборот. Сейчас я скину комментированный erase вариант. Попробую расскоментировать и глянуть на loaded. По факту он всегда загружается, так как я в rule- файле (main) задаю два вектора совпадающих.
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
||
| 21.06.2019, 21:20 [ТС] | ||
|
не, заполняется он всегда при обоих вариантах. Хоть расскоментируй, хоть заккоментируй - проверил.
Добавлено через 2 минуты
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 21.06.2019, 21:20 | |
|
пардон, я не туда смотрел, загружается, но active_users заполняется только один раз при запуске программы и не изменяется, не вижу где в коде это
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|
| 21.06.2019, 21:32 [ТС] | |
|
ну вот, поиск сужается. Вижу, это другое описание проблемы, точнее, даже расширение ее понимания.
Добавлено через 2 минуты zayats80888, Хотя нет, active_users тоже меняет размер, если вставить breakpoint - insert breakpoint. Если просто F9 жать, не меняет, а лишь при запуске, а если брейкпойнт правой кнопкой мыши добавить, то меняет размер, заполняется. Хм, какого лешего у меня есть и Elevation::active_users и active_users. Вот это перепроверю. Причем если щелкнуть по второму укзавает на первый.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 21.06.2019, 21:34 | |
|
Что я понял: код который вы показали в топике(с удалением из passengers) выполняется только один раз вначале, тогда же и заполняется active_users. Дальше выбирается самый дальний этаж этаж назначения(из active_users). Далее запускается цикл, пока не доедем до этого дальнего этажа, в котором на каждой итерации производятся манипуляции с loaded(не особо вникал) и active_users(который не меняется). Вектор passangers в цикле вообще не задействован. По достижении дальнего этажа программа завершается. Вот я и не пойму логику всего этого действия.
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|
| 21.06.2019, 21:36 [ТС] | |
|
Логика - доехать до дальнего этажа несколькими людьми. Раньше вообще лишь один человек катался.
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|
| 21.06.2019, 21:38 [ТС] | |
|
Вот, меняется. Они не могут не меняться, они еще в конце выводятся в тексте.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 21.06.2019, 21:44 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
||
| 21.06.2019, 21:56 [ТС] | ||
|
Так же в дальшнейшем будет passengers меняться постоянно, ну реально же лифтом кто-то всегда хочет пользоваться. Это может быть либо время, либо реквест через графику. И active_users своего рода производная что-ли passengers будет так же работать, меняться. А если я с passengers не решу, то получу миллион одинаковых пользователей. Добавлено через 8 минут Если лифт движется к пользователю вверх то он не может взять пользователя, который нажмет кпопку вниз. Логично. Так же, если лифт проехал третий этаж, и движется с 5-го на 100-й то пассажир с третьего этажа подождет. Вот такая логика. Ну есть возможность добавить несколько лифтов, усложнить логику. но надо начинать с простого.
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 21.06.2019, 22:00 | |||
Сообщение было отмечено streamc как решение
Решениеdirect[std::distance(passengers.begin(), k)] на direct.back() и убедитесь что direct[0] действителен еще до начала выборкиДобавлено через 2 минуты streamc, как работаю лифты я знаю, мне трудно понять логику конкретно вашего лифта
1
|
|||
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
||||
| 21.06.2019, 22:15 [ТС] | ||||
|
Добавлено через 9 минут Я еще тщательнее и нормально все послезавтра буду делать. zayats80888 Спасибо!
0
|
||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 21.06.2019, 22:20 | ||
1
|
||
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|||||||
| 21.06.2019, 22:24 [ТС] | |||||||
Добавлено через 42 секунды Над этим лифтом еще очень много работы, как и с архитектуры. оптимизации, программирования, переделеки, конкретики. И так же создателю лифта учиться надо проектированию лифта.
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 21.06.2019, 22:28 | ||
|
Кстати амперсанд убирать не нужно было, т. к. int* dst_floor_end = NULL; я просто всего кода не видел еще тогда
1
|
||
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
||
| 21.06.2019, 22:30 [ТС] | ||
|
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 21.06.2019, 22:32 | ||
|
0
|
||
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|
| 21.06.2019, 22:51 [ТС] | |
|
Да, рано радоваться. Поменял этажность с 20 до 200. Теперь он опять вниз катается, когда вверх надо. Точнее, катится вверх, но берет пользователей, которым надо вниз. надо еще больше думать над объектами изменяемыми в ходе итерации, будь то сами итераторы или объекты внутри циклов, условий.
Добавлено через 5 минут О, сейчас и на 20 не заработал. Добавлено через 7 минут Хм. или я масивы уже путать стал. вновь работает. все-таки большую выборку не обманешь.
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
|
| 22.06.2019, 21:47 [ТС] | |
|
Так. Проверил на коде с floor_count=200. До этого времени со вчерашней ночи прогу не трогал.
Он делает выборку не всех пассажиров. Придется точно засесть. P.S. Насчет логики лифта, он должен захватывать всех пассажиров по пути к первому пассажиру, если может. В нем такого нет. Реализовать не так и сложно. Доделаю. Ясно, что логика кажется странной. По факту и вес можно добавить. Типа не брать больше определенного количества пассажиров, как пример. Да много чего. При двадцати этажах работает нормально, при двухсот чаще тоже, но иногда - нет. Значит, ошибка. Неважно, в алгоритме (нет, там ничего сложного нет), еще чем-то, методах или даже компиляции. нужен результат 100 процентов. Хотя я уже на данном этапе могу улучшать работу лифта и сделать подхват пассажиров. Добавлено через 4 минуты int level_floor = std::get<2>(*std::max_element(active_use rs.begin(), active_users.end(), А вот тут логическая ошибка у меня. Я делаю максимум назначения по максимальному назначению этажей входящих в диапазон отправления. По факту максимум там рядом не стоял. проверяется на больших размерностях. Но это исправимо и не напрягает. Напрягало, что он мог вниз поехать. Но вот не вижу этого пока. Не вижу.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 22.06.2019, 21:51 | |
|
streamc, все в ваших руках
Могу посоветовать взять карандаш и листок бумаги, и хорошенько все обдумать, затем приступать к реализации. Я ваш код переделывать не хочу, мне проще заново написать, но вам это вряд ли поможет, судя по вашему энтузиазму, так что дерзайте. Если что, спрашивайте (только хорошо сформулируйте вопрос в отдельной теме, т.к. эту мы сильно загадили )
0
|
|
|
1 / 1 / 0
Регистрация: 23.11.2010
Сообщений: 136
|
||||
| 22.06.2019, 21:57 [ТС] | ||||
|
zayats80888,
Да, он не доделан, и где-то это очевидно, как с тем, что я написал. У вас все-равно будет своя реализация. for (vector<vec>::iterator k=vec.begin(); it!=vec.end(); /*it++*/) { if() lalala; else ++it; } Если сделать два if программа может весело себя вести. Я еще проверю на том коде.
0
|
||||
| 22.06.2019, 21:57 | |
|
Как перенести все отрицательные элементы из одного массива в другой. Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор Из одного массива сделать два массива, в один перенести четные элементы, в другой нечетные Из массива перенести четные элементы в другой массив.А нечетные перенести в другой массив Четные числа вектора перенести в другой список Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|