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

Как правильно вывести на экран список структур в forward_list?

07.02.2020, 10:18. Показов 1733. Ответов 7
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как правильно вывести на экран список структур в forward_list, сейчас он выводим только последний элемент и клонирует его несколько раз, в зависимости от того сколько элементов было введено
и как можно добавить/удалить элемент из конца списка, ведь push_back() он не поддерживает


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

добавления элемента в начало списка;
добавления элемента в конец списка;
удаления элемента из начала списка;
удаления элемента из конца списка;
удаления из списка элемента, указанного его порядковым номером;
изменение данных элемента списка, указанного его порядковым номером;
вывода элементов списка на экран

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <forward_list>
#include<climits>
#include <windows.h>
#include <cstring>
#include <iomanip>
 
using namespace std;
 
struct Facult
{
    char facultet[70];
    int kolvo_student;
    float sr_ball;
    int kolvo_otlich;
};
 
std::forward_list<Facult> facultList;
Facult f;
 
/*ВСПОМОГАТЕЛЬНАЯ ФУНКЦИЯ, ИЩЕТ МАКСИМАЛЬНУЮ СТРОКУ ДЛЯ КОЛОНКИ*/
int get_max_caption(std::forward_list<Facult>& v) {
 
    int maximum = strlen(f.facultet);
 
    int temp;
 
    temp = strlen(f.facultet);
    if (temp > maximum) maximum = temp;
 
    return maximum;
}
/*КОНЕЦ ВСПОМОГАТЕЛЬНЫХ ФУНКЦИЙ*/
 
/*ФУНКЦИЯ ЗАНОСИТ ДАННЫЕ В НАЧАЛО СПИСКА*/
void GetData(std::forward_list<Facult>& v)
{
 
    // вводим поля f
    std::cout << "\n";
    std::cout << "Факультет: ";
    std::cin >> f.facultet;
    std::cout << "Кол-во студентов: ";
    std::cin >> f.kolvo_student;
    std::cout << "Средний балл: ";
    std::cin >> f.sr_ball;
    std::cout << "Кол-во отличников: ";
    std::cin >> f.kolvo_otlich;
 
    v.push_front(f); // добавляем введённую струтуру в начало списка
    
}
 
 
/*ФУНКЦИЯ ИЗВЛЕКАЕТ ЗАПИСЬ*/
void ShowData(const std::forward_list<Facult>& v)
{
    std::cout << "\n\n";
    std::cout << "Список факультетов\n";
    std::cout << '\n';
    struct ColumnWidth {     //Вспомогательная структура поможет обрабатывать промежуточные данные
        int facultet;
 
    } ColumnWidth;
    int temp;               //Переменная для хранения подходящей ширины
 
    /*ПОДСЧЁТ НУЖНОЙ ШИРИНЫ КОЛОНКАМ*/
    ColumnWidth.facultet = strlen("Факультет") + 1;
    temp = get_max_caption(facultList) + 1;
    if (ColumnWidth.facultet < temp) ColumnWidth.facultet = temp;
 
    /*КОНЕЦ РАСЧЁТА*/
 
 
    /*ЯЧЕЙКИ-ЗАГОЛОВКИ*/
    std::cout << "Факультет" << std::setw(ColumnWidth.facultet - strlen("Факультет")) << '|';
    std::cout << std::setw(10) << "Кол-во студентов" << '|';
    std::cout << std::setw(10) << "Средний балл" << '|';
    std::cout << std::setw(10) << "Кол-во отличников" << '|';
 
 
    /*КОНЕЦ ЯЧЕЕК-ЗАГОЛОВКОВ*/
    std::cout << '\n';
    
    /*ВЫВОДИМ МАССИВ СТРУКТУР ПОСТРОЧНО*/
 
    for (const auto& elem : v) std::cout << f.facultet << std::setw(ColumnWidth.facultet - strlen(f.facultet)) << '|';
    for (const auto& elem : v) std::cout.width(16);
    for (const auto& elem : v) (std::cout << std::setprecision(2) << std::fixed << f.kolvo_student << '|').width(12);
    for (const auto& elem : v) (std::cout << std::setprecision(2) << std::fixed << f.sr_ball << '|').width(17);
    for (const auto& elem : v) (std::cout << std::setprecision(2) << std::fixed << f.kolvo_otlich << '|').width(16);
    for (const auto& elem : v) std::cout << '\n';
        
    /*КОНЕЦ ПОСТРОЧНОГО ВЫВОДА*/
 
}
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
 
    while (true) {
 
        int variant;
        std::cout << "Выберите вариант\n" << std::endl;
        std::cout << "1. Добавить элемент в начало списка\n"
            << "2. Добавить элемент в конец списка\n"
            << "3. Удалить элемент из начала списка\n"
            << "4. Удалить элемент из конца списка\n"
            << "5. Удалить элемент по порядковому номеру\n"
            << "6. Изменить данные элоемента списка\n"
            << "7. Вывести элементы списка\n" << std::endl;
        std::cout << ">>> ";
        std::cin >> variant;
 
        switch (variant) {
        case 1:
        {
            GetData(facultList);              //Добавление элемента в начало списка
            break;
        }
        case 3:
        {
            facultList.pop_front();             //Удаление элемента из начала списка
            break;
        }
        
        case 7:
        {
            ShowData(facultList);             //Вывод элементов экран
            break;
 
        }
 
        }
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2020, 10:18
Ответы с готовыми решениями:

Class forward_list (односвязный список)
Задание - реализовать класс односвязный список. Не могу определиться с полями и конструктором List(size_type num, const value_type...

Как правильно вывести односвязный список?
Здравствуйте! Нужно реализовать в Turbo Pascal очередь, в том числе и вывод её на печать после различных операций над ней. Пока сделал...

Как правильно вывести результат запроса в список?
подскажите как правильно вывести результат запроса в список Процедура ТабличнаяЧастьНоменклатураНачалоВыбораИзСписка(Элемент,...

7
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2020, 10:27
Цитата Сообщение от Daninil Посмотреть сообщение
/*ВЫВОДИМ МАССИВ СТРУКТУР ПОСТРОЧНО*/
for (const auto& elem : v) std::cout << f.facultet << std::setw(ColumnWidth.facultet - strlen(f.facultet)) << '|';
    for (const auto& elem : v) std::cout.width(16);
    for (const auto& elem : v) (std::cout << std::setprecision(2) << std::fixed << f.kolvo_student << '|').width(12);
    for (const auto& elem : v) (std::cout << std::setprecision(2) << std::fixed << f.sr_ball << '|').width(17);
    for (const auto& elem : v) (std::cout << std::setprecision(2) << std::fixed << f.kolvo_otlich << '|').width(16);
    for (const auto& elem : v) std::cout << '\n';
C++
1
2
3
4
5
6
7
8
9
for (const auto &f: v)
{
    std::cout << f.facultet << std::setw(ColumnWidth.facultet - strlen(f.facultet)) << '|';
    std::cout.width(16);
    (std::cout << std::setprecision(2) << std::fixed << f.kolvo_student << '|').width(12);
    (std::cout << std::setprecision(2) << std::fixed << f.sr_ball << '|').width(17);
    (std::cout << std::setprecision(2) << std::fixed << f.kolvo_otlich << '|').width(16);
    std::cout << std::endl;
}
0
0 / 0 / 0
Регистрация: 01.11.2019
Сообщений: 49
07.02.2020, 10:33  [ТС]
Спасибо)
0
0 / 0 / 0
Регистрация: 01.11.2019
Сообщений: 49
07.02.2020, 18:54  [ТС]
а как добавить/ удалить элемент в конце списка, никто не знает?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2020, 20:01
Цитата Сообщение от Daninil Посмотреть сообщение
а как добавить/ удалить элемент в конце списка, никто не знает?
Для std::forward_list - никак.
0
0 / 0 / 0
Регистрация: 01.11.2019
Сообщений: 49
07.02.2020, 20:22  [ТС]
а можно еще каким-то способом реализовать односвязный список, что бы можно было добавить/ удалить элемент в конец?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2020, 20:42
Цитата Сообщение от Daninil Посмотреть сообщение
а можно еще каким-то способом реализовать односвязный список, что бы можно было добавить/ удалить элемент в конец?
Использование односвязного списка из последовательности слов и возможность менять слова в списке
0
0 / 0 / 0
Регистрация: 01.11.2019
Сообщений: 49
07.02.2020, 21:19  [ТС]
Добавление элемента в конец сделал вот так, можно подобным способом удалить последний элемент?
Нужно как то ограничить цикл, что бы он шел не до последнего, а до предпоследнего, но как это сделать?
C++
1
2
3
4
5
    auto before_end = v.before_begin();
    for (auto& _ : v)
        ++before_end;
 
    v.insert_after(before_end, f); // добавляем введённую структуру в конец списка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2020, 21:19
Помогаю со студенческими работами здесь

Как правильно вывести на экран?
Как правильно вывести на экран следующую инфу в две строки (location.hostname); var year = (new Date).getFullYear(); var oldYear =...

Как вывести даные из БД на экран правильно
Есть 2 таблицы в БД tab и tab_2 tab: id, job tab_2: id, name, job_id Соединяю данные из них одним запросом sql c JOIN $result =...

Как правильно использовать классы? Как вывести значение класса на экран?
Всех приветствую. Делаю задание по книге. По заданию нужно завести класс, в котором хранится информация о книгах: число выданных на руки...

Подскажите, как правильно вывести список стран без token. vk api
Используя vk api вывести список стран. https://vk.com/dev/database.getCountries

Как вывести на экран список в 4 столбца
Как вывести на экран список имен в 4 столбца из файла. В данном коде список в 1 столб #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru