С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 09.05.2017
Сообщений: 3

Создать два линейных списка, во второй перенести элементы первого, которые >100, а в первом их удалить

09.05.2017, 14:09. Показов 1050. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать два линейных списка.
Первый заполнить случайными числами.
Во-второй перенести элементы первого списка которые >100, а в первом их удалить
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2017, 14:09
Ответы с готовыми решениями:

Объединить два списка в один так, чтобы элементы второго списка, которые есть в первом, в новом списке не были
Prolog Добавлено через 1 минуту Умные люди, помогите пожалуйста!!!!!! Мне на прологе нужно реализовать такую задачу: есть два списка...

Создать второй список и перенести в него все положительные элементы первого
Здравствуйте! Нужно сделать процедуру или функцию, которая создается 2й список и переносит в него все положительные элементы первого...

Clojure Создать два списка, поместив в первый отрицательные, а во второй – положительные элементы исходного списка
Помогите пожалуйста решить следующие задачи: 1. Задан список чисел. Создать два списка, поместив в первый отрицательные, а во второй –...

9
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
11.05.2017, 00:02
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <algorithm>
#include <list>
 
template<typename T>
void fillWithRandomNumbers( std::list<T>& l );
 
template<typename T>
void createTwoLinkedLists()
{
    std::list<T> l1, l2;
    fillWithRandomNumbers( l1 );
    std::copy_if( l1.begin(), l1.end(), l2.begin(), [] ( auto a ) { return a > 100; } );
    std::remove_if( l1.begin(), l1.end(), [] ( auto a ) { return a > 100; } );
}
 
int main()
{
    createTwoLinkedLists();
}
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
11.05.2017, 07:11
Цитата Сообщение от GoldenId Посмотреть сообщение
C++
1
std::remove_if( l1.begin(), l1.end(), [] ( auto a ) { return a > 100; } );
ничего не удаляется, просто сдвигается.
Цитата Сообщение от GoldenId Посмотреть сообщение
C++
1
std::copy_if( l1.begin(), l1.end(), l2.begin(), [] ( auto a ) { return a > 100; } );
UB.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.05.2017, 11:16
Если нужно "реальное" удаление из первого, а не просто изменённый вывод - нужно использовать std::partition + метод erase и затем для каждого списка скопировать содержимое в поток вывода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <random>
 
int main()
{
    std::list<int> first, second;
 
    std::default_random_engine gen { std::random_device()() };
    std::uniform_int_distribution<> dist(0, 200);
    std::generate_n(std::back_inserter(first), 30, [&dist, &gen] { return dist(gen); });
    std::copy(first.cbegin(), first.cend(), std::ostream_iterator<int>(std::cout, " "));
 
    std::cout << "\nAfter:\n";
    std::partition_copy(first.cbegin(), first.cend(), std::back_inserter(second),
        std::ostream_iterator<int>(std::cout, " "), [](const auto x) { return x > 100; });
    std::cout << std::endl;
    std::copy(second.cbegin(), second.cend(), std::ostream_iterator<int>(std::cout, " "));
}
Добавлено через 6 минут
Решил всё-таки написать вариант с "реальным" удалением.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <random>
 
int main()
{
    std::list<int> first, second;
    auto print_l = [](const auto &l)
    {
        std::copy(l.cbegin(), l.cend(), std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    };
 
    std::default_random_engine gen { std::random_device()() };
    std::uniform_int_distribution<> dist(0, 200);
    std::generate_n(std::back_inserter(first), 30, [&dist, &gen] { return dist(gen); });
    print_l(first);
 
    const auto it = std::partition(first.begin(), first.end(), [](const auto x) { return x <= 100; });
    std::copy(it, first.end(), std::back_inserter(second));
    first.erase(it, first.end());
    std::cout << "After:\n";
    print_l(first);
    print_l(second);
}
1
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
11.05.2017, 21:26
Цитата Сообщение от GbaLog- Посмотреть сообщение
C++
1
std::copy_if( l1.begin(), l1.end(), l2.begin(), [] ( auto a ) { return a > 100; } );
UB.
Из-за предыдущего вызова или сам по себе?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.05.2017, 23:39
Цитата Сообщение от GoldenId Посмотреть сообщение
Из-за предыдущего вызова или сам по себе?
из-за предыдущего.
0
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
12.05.2017, 02:01
Погодите.
Цитата Сообщение от GbaLog- Посмотреть сообщение
Сообщение от GoldenId
C++
1
std::copy_if( l1.begin(), l1.end(), l2.begin(), [] ( auto a ) { return a > 100; } );
UB.
Это UB из-за третьего параметра? Нужно back_inserter( l2 )?

Что-то я спросил
Цитата Сообщение от GoldenId Посмотреть сообщение
Из-за предыдущего вызова или сам по себе?
, а потом посмотрел - этот вызов ведь первый.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
12.05.2017, 05:34
Цитата Сообщение от GoldenId Посмотреть сообщение
Нужно back_inserter( l2 )?
да.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.05.2017, 10:51
Цитата Сообщение от GoldenId Посмотреть сообщение
а потом посмотрел - этот вызов ведь первый.
Вообщем-то, работать с хвостом, который идёт после перемещения remove_if тоже не очень безопасно.
0
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
12.05.2017, 15:01
Цитата Сообщение от MrGluck Посмотреть сообщение
Вообщем-то, работать с хвостом, который идёт после перемещения remove_if тоже не очень безопасно.
Ну да. Можно было бы делать remove_if, если бы записывать, что найден этот новый past-the-end обратно в список, но такой возможности нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2017, 15:01
Помогаю со студенческими работами здесь

Удалить элементы первого списка из второго(т.е. те которые совпадают),написать через рекурсию
дано два списка (L1 L2),нужно удалить элементы первого списка из второго(т.е. те которые совпадают),написать через рекурсию

Получить третий массив, в который входят все элементы первого массива и те элементы второго, которые не встречались в первом
Задача по теме &quot;массив&quot;. &quot;Объединение массивов&quot;. Напишите программу, которая запрашивает и вводит с экрана два линейных массива...

Поместить в два линейных односвязных списка: в первый - чётные по порядку числа, во второй - нечётные
Разработайте программу, которая вводит с клавиатуры ввода целые числа и помещает их в два линейных односвязных списка: в первый - четные по...

Объединить 2 списка в один, элементы которого будут только те элементы, которые есть в первом, но нет во втором
Например '(1 2 4 7 8) '(3 5 8 2 0 5) Результат - '(1 4 7)

Оставить в первом списке только те элементы которые входят во второй трижды
Пожалуйста, помогите решить задачу на прологе. Дано 2 списка нужно оставить в первом списке только те элементы которые входят во второй...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru