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

Оптимизация программы для работы со списками

08.02.2015, 14:47. Показов 1097. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Написал код, который мне скоро сдавать по предмету. Хотелось бы узнать как его оптимизировать или упростить что-бы не стыдно было скидывать.

Задание:
Написать программу, используя библиотеку STL, которая создает список объектов класса Человек с полями: имя, фамилия, возраст. Показать список на экран, записать в текстовый файл. Обернуть список и дописать его в файл.
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
#include <iostream>
#include <cstring>
#include <list>
#include <algorithm>
#include <iterator>
#include <fstream>
using namespace std;
class Human {
public:
    char name[30];
    char lastName[30];
    int age;
    Human(const char  *i, const char  *n, int a);
};
Human::Human(const char  *i, const char  *n, int a){
 
    strcpy(name, i);
    strcpy(lastName, n);
    age =a;
}
void showList(list <Human> A){
    list<Human>::iterator it=A.begin();
    for(;it!=A.end();++it)
        cout
                <<"Name: "<<(*it).name
                <<". Last name: " <<(*it).lastName
                <<". Age: "<<(*it).age <<endl;
 
}
void writeList(list <Human> A){
    ofstream out;
    out.open("out.txt");
    out<<"Your list: "<<endl;
    list<Human>::iterator it=A.begin();
    for(;it!=A.end();++it){
        out
                <<"Name: "<<(*it).name
                <<". Last name: " <<(*it).lastName
                << ". Age: "<<(*it).age<<endl;
    }
    out.close();
}
void addwriteList(list <Human> A){
    ofstream addOut;
    addOut.open("out.txt", std::ios::app);
    addOut<<endl<<"Your list: "<<endl;
 
    list<Human>::iterator it=A.begin();
    for(;it!=A.end();++it){
        addOut
                <<"Name: "<<(*it).name
                <<". Last name: " <<(*it).lastName
                <<". Age: "<<(*it).age<<endl;
    }
    addOut.close();
}
int main() {
    list<Human> listHuman;
    Human A( "Raewr", "Podwd" , 19);
    Human B( "Ola" , "Haode", 20);
    Human C( "Sasha" , "Lodwad" , 25);
 
    cout<<"List of members:"<<endl;
 
    listHuman.push_back(A);
    listHuman.push_back(B);
    listHuman.push_back(C);
 
 
    showList(listHuman);
 
    writeList(listHuman);
 
    cout<<"Reverse:"<<endl;
    reverse(listHuman.begin(),listHuman.end());
 
    showList(listHuman);
 
    addwriteList(listHuman);
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2015, 14:47
Ответы с готовыми решениями:

Оптимизация алгоритма работы со списками
Задача: Управление погрузками в порту. Каждые отрезок времени(условно 5 минут, но это не имеет абсолютно никакого значения) на погрузку...

Оптимизация работы программы
Ув. господа! Всего есть два вопроса.. Первый: Как можно создать форму, набросать на нее диаграммы, кнопки и прочее, но при этом чтобы...

Оптимизация и ускорение работы программы
Здравствуйте, есть достаточно большая программа в которой используется большое множество циклов, заполнение массивов 1000х1000, рандомная...

2
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
08.02.2015, 18:58
В функции его надо передавать по ссылке. Перегрузить оператор вывода в поток.
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
#include <iostream>
#include <cstring>
#include <list>
#include <algorithm>
#include <iterator>
#include <fstream>
using namespace std;
 
class Human
{
private:
    char name[30];
    char lastName[30];
    int age;
    friend std::ostream& operator<<(std::ostream& ost, Human const& h);
public:
    Human(const char  *i, const char  *n, int a);
};
 
Human::Human(const char  *i, const char  *n, int a){
 
    strcpy(name, i);
    strcpy(lastName, n);
    age =a;
}
 
std::ostream& operator<<(std::ostream& ost, Human const& h)
    {
        ost <<"Name: "<<h.name
                <<". Last name: " <<h.lastName
                <<". Age: "<<h.age;
        return ost;
    }
 
void showList(list <Human> const& A)
{
    for(list<Human>::const_iterator it=A.begin();it!=A.end();++it)
    {
        cout << *it << endl;
    }
}
 
void writeList(list <Human> const& A){
    ofstream out;
    out.open("out.txt");
    out<<"Your list: "<<endl;
 
    for(list<Human>::const_iterator it=A.begin(); it!=A.end(); ++it)
    {
        out << *it <<endl;
    }
    out.close();
}
 
void addwriteList(list <Human> const& A){
    ofstream addOut;
    addOut.open("out.txt", std::ios::app);
    addOut<<endl<<"Your list: "<<endl;
 
    for(list<Human>::const_iterator it=A.begin(); it!=A.end(); ++it)
    {
        addOut << *it <<endl;
    }
    addOut.close();
}
int main()
{
    list<Human> listHuman;
    cout<<"List of members:"<<endl;
 
    listHuman.emplace_back("Raewr", "Podwd" , 19);
    listHuman.emplace_back("Ola" , "Haode", 20);
    listHuman.emplace_back("Sasha" , "Grey" , 27);
 
    showList(listHuman);
 
    writeList(listHuman);
 
    cout<<"Reverse:"<<endl;
    reverse(listHuman.begin(),listHuman.end());
 
    showList(listHuman);
 
    addwriteList(listHuman);
    return 0;
}
0
102 / 44 / 18
Регистрация: 08.01.2015
Сообщений: 97
08.02.2015, 19:58
мой вариант сообщения , сразу не увидел сообщения от igorrr37.

Начало есть уже не стыдно. Human это класс значит поля
name, lastName,age;
вынести в private секцию скрыв от внешнего воздействия.
Для доступа к ним дописать открытые методы Get, Set.

Функции showList, writeList и addwriteList пусть в параметрах принимают const-ссылку const list <Human> & A . Для того чтобы не создавать копий списка, и случайно, где-то в функции, не изменить список. Соответственно iterator поменять на const_iterator.
Для удобства пользователя лучше передавать имя файла в параметрах
, а не прятать внутри Функций.
Не хватает проверки на успешное открытие, чтение файла: бросить исключение, или вывести сообщение.
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
#include <iostream>
#include <cstring>
#include <list>
#include <algorithm>
#include <iterator>
#include <fstream>
 
using namespace std;
class Human
    {
public:
    Human(const char  *i, const char  *n, int a);
    void SetName(const char * inname);
    void SetLastName(const char * inlastname);
    void SetAge(int inage);
    const char* GetName() const;
    const char* GetLastName() const;
    int GetAge() const;
private:
    char name[30];
    char lastName[30];
    int age;
};
 
void Human::SetName(const char * inname)
    {
      strcpy(name, inname);
    }
void Human::SetLastName(const char * inlastname)
    {
      strcpy(lastName, inlastname);
    }
void Human::SetAge(int inage)
    {
      age = inage;
    }
 
const char * Human::GetName() const
    {
      return name;
    }
const char * Human::GetLastName() const
    {
      return lastName;
    }
int Human::GetAge() const
    {
      return age;
    }
 
Human::Human(const char  *i, const char  *n, int a){
 
    strcpy(name, i);
    strcpy(lastName, n);
    age =a;
}
void showList(const list <Human> & A){
    list<Human>::const_iterator it=A.begin();
    for(;it!=A.end();++it)
        cout
                <<"Name: "<<(*it).GetName()
                <<". Last name: " <<(*it).GetLastName()
                <<". Age: "<<(*it).GetAge() <<endl;
 
}
void writeList(const list <Human> & A, const  char * fileName ){
    ofstream out;
    out.open(fileName);
        if( ! out.is_open())
        {
           cout << "Error in opening file";
           return;
        }
    out<<"Your list: "<<endl;
    list<Human>::const_iterator it=A.begin();
    for(;it!=A.end();++it){
        out
                <<"Name: "<<(*it).GetName()
                <<". Last name: " <<(*it).GetLastName()
                << ". Age: "<<(*it).GetAge() <<endl;
    }
    out.close();
}
void addwriteList(const list <Human> & A, const  char * fileName ){
    ofstream addOut;
    addOut.open(fileName, std::ios::app);
    if( ! addOut.is_open())
        {
           cout << "Error in opening file";
           return;
        }
    addOut<<endl<<"Your list: "<<endl;
 
    list<Human>::const_iterator it=A.begin();
    for(;it!=A.end();++it){
        addOut
                <<"Name: "<<(*it).GetName()
                <<". Last name: " <<(*it).GetLastName()
                <<". Age: "<<(*it).GetAge() <<endl;
    }  
    addOut.close();
}
int main() {
    list<Human> listHuman;
    Human A( "Raewr", "Podwd" , 19);
    Human B( "Ola" , "Haode", 20);
    Human C( "Sasha" , "Lodwad" , 25);
 
    cout<<"List of members:"<<endl;
 
    listHuman.push_back(A);
    listHuman.push_back(B);
    listHuman.push_back(C);
 
 
    showList(listHuman);
    writeList(listHuman,"out.txt");
 
    cout<<"Reverse:"<<endl;
    reverse(listHuman.begin(),listHuman.end());
    showList(listHuman);
    addwriteList(listHuman,"out.txt");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2015, 19:58
Помогаю со студенческими работами здесь

Оптимизация или увеличение скорости работы программы
Доброго времени суток, программисты! Буквально на днях столкнулся с проблемой, связанной с перегрузкой &quot;дельфина&quot; при...

Предикаты для работы со списками
Помогите, пожалуйста, с задачей. Написать предикат p(+L, + P, -R), который в качестве результата выдает список, состоящий из всех...

Функции для работы со списками и кортежами
Здравствуйте, дорогие форумчане, подскажите пожалуйста, я запнулся и не понимаю как сделать правильно. Само задание: 1) Попросите...

Списки: функции для работы со списками
Помогите пожааааааалуйста с задачками!!!! ;) ОПИШИТЕ ФУНКЦИИ ТИПОВЫХ ОПЕРАЦИЙ С СПИСКАМИ: 1. Функция AddHead (int d) добавление узла...

Аналог функций для работы со списками
Помогите найти/написать аналоги функции для работы со списками(2-3 из перечисленных) :...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru