Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Чистый
Автор FAQ
2692 / 1388 / 71
Регистрация: 08.09.2011
Сообщений: 3,720
Записей в блоге: 1
#1

Удалить первый элемент из списка - C++

27.05.2012, 22:49. Просмотров 692. Ответов 9
Метки нет (Все метки)

Всем хай!
Есть задача, создать список и выполнить некие операции надо ним
и так список:
C++
1
2
3
4
5
struct element
{
     char a;
     element *next;
};
так же есть класс в котором перегрузил унарный оператор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
list list::operator--()
{
     if (head)
     {
        element *h;
        h = head;
        head = h->next;
        delete h;
        kol--; // тип int 
     }
     else std::cout<<"List is empty 6666\n";
     return (*this);
}
который как раз и должен удалить первый элемент но что то при удалении в результате не то что надо остается... Подскажите где накосячил
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 22:49     Удалить первый элемент из списка
Посмотрите здесь:

Удалить первый элемент списка - C++
Подскажите пожалуйста!!! Как сделать так чтобы в этой программе происходило удаление элемента первого в списке??? В этой программе...

Удалить первый элемент односвязного списка - C++
Нужно написать собственный контейнер в виде односвязного списка. Удаление элементов из середины и конца я сделал, но не могу придумать как...

Удалить из списка первый элемент с четным информационным полем - C++
Здравствуйте,прошу помощи в решение задачи,очень надо сдать,а я не знаю как делать. Сформировать двунаправленный список,Тип...

Надо удалить n-ный элемент списка, при том, что он не первый и не последний - C++
Есть такой код: #include&lt;iostream&gt; #include &quot;rus.h&quot; using namespace std; struct Info { int d; };

Из списка удалить первый из четных элементов - C++
Добрый вечер!помогите пожалуйста с заданием Из списка удалить первый из четных элементов.вот мой код пожалуйста допилите #include...

Поменять местами первый и последний элементы списка и удалить их средне арифметическое - C++
Помогите решить задачи пожалуйста!!! 1)Дан список, содержащие числовые данные. Поменять местами первый и последний элементы и удалить из...

Удалить первый положительный элемент массива - C++
Помогите докончить и исправить код, и объясните мне: 1) Как изменить размер массива 2) Как сдвигать элементы массива 3) Как работает...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.05.2012, 22:53     Удалить первый элемент из списка #2
Чистый, выложи полный код. Здесь вроде всё как надо (кроме момента возврата из оператора списка по значению, да и идеологически неверной перегрузки оператора с подобной целью).
Чистый
Автор FAQ
2692 / 1388 / 71
Регистрация: 08.09.2011
Сообщений: 3,720
Записей в блоге: 1
27.05.2012, 23:03  [ТС]     Удалить первый элемент из списка #3
вот код:
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
#include <iostream>
 
using namespace std;
 
struct element
{
     char a;
     element *next;
};
class list
{
    element *head;
    int kol;
 
public:
    list();
    explicit list(char c);
    bool operator == (list &l);
    list operator--();
    void add(char c);
    void print();
 
    ~list();
 
};
 
int main()
{
    list ch1('a'), ch2('a');
    if (ch1==ch2)
    {
        cout << "Элементы одинаковые\n";
    }
    else
    {
        cout << "Элементы разные\n";
    }
    cout << "Первый экземпляр элемента ";
    ch1.print();
    cout << "\nВторой экземпляр элемента ";
    ch2.print();
    cout << "\nAdd data in class\n" << endl;
    ch1.add('g');
    if (ch1==ch2)
    {
        cout << "Элементы одинаковые\n";
    }
    else
    {
        cout << "Элементы разные\n";
    }
    cout << "Первый экземпляр элемента ";
    ch1.print();
    cout << "\nВторой экземпляр элемента ";
    ch2.print();
    --ch1;
    cout << "Первый экземпляр элемента ";
    ch1.print();
    return 0;
}
и расскажи что не так сделал... Все же я пока учусь и хочу на этом этапе понять что не так что бы потом не пришлось переучиваться
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.05.2012, 23:05     Удалить первый элемент из списка #4
Чистый, а реализация списка?
Чистый
Автор FAQ
2692 / 1388 / 71
Регистрация: 08.09.2011
Сообщений: 3,720
Записей в блоге: 1
27.05.2012, 23:10  [ТС]     Удалить первый элемент из списка #5
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
list::list()
{
    head = NULL;
    kol = 0;
}
 
list::list(char c)
{
    head = new element;
    head->a = c;
    head->next = NULL;
    kol = 1;
}
 
list::~list()
{
    element *h;
    if (head)
    {
        do
        {
            h = head;
            head = h->next;
            delete h;
        }
        while (head);
    }
}
 
void list::add(char c)
{
     if (head == NULL)
     {
        head = new element;
        head->a = c;
        head->next = NULL;
        kol = 1;
     }
     else
     {
        element *h;
        h = new element;
        h->a = c;
        h->next = head;
        head = h;
        kol++;
     }
}
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.05.2012, 23:15     Удалить первый элемент из списка #6
Чистый, ну, собственно, для начала. Не реализован конструктор копии. Значит, что используется предоставляемый компилятором, выполняющий обычное поэлементное копирование. Что происходит при вызове lis::operator--(), а вернее, при возврате из него: поскольку возврат осуществляется по значению, вызывается конструктор копии. Поскольку он не реализован, вызывается стандартный. Поскольку вызывается стандартный, то ни о каком копировании самого списка речи не идёт, копируются только указатели. А поскольку оператор декремента вызывается без приёмника, то возвращённый из него объект тут же и удаляется, т.е. вызывается деструктор. А поскольку оставшийся объект хранил те же адреса, что и временный, возвращённый из оператора --, то и уничтожается реальный список, который присутствует в единственном экземпляре. Рассуждать о том, что происходит дальше, гиблое дело, тут всё на воле случая.
Чистый
Автор FAQ
2692 / 1388 / 71
Регистрация: 08.09.2011
Сообщений: 3,720
Записей в блоге: 1
27.05.2012, 23:25  [ТС]     Удалить первый элемент из списка #7
так как это исправить?
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.05.2012, 23:29     Удалить первый элемент из списка #8
Чистый, написать конструктор копии, примерно такой:
C++
1
2
3
4
5
6
7
list::list(const list& source):
head(0),
kol(0)
{
    for (element *it = source.head; it != 0; it = it->next)
        add(it->a);
}
Чистый
Автор FAQ
2692 / 1388 / 71
Регистрация: 08.09.2011
Сообщений: 3,720
Записей в блоге: 1
28.05.2012, 09:46  [ТС]     Удалить первый элемент из списка #9
спс завтра буду пробовать!

Добавлено через 10 часов 11 минут
так получается в большинстве случаев при перегрузке операторов унарных надо перегружать и конструктор копии?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 10:20     Удалить первый элемент из списка
Еще ссылки по теме:

Удалить из массива А (20) первый отрицательный элемент - C++
Удалить из массива А (20) первый отрицательный элемент.

Символьный массив, удалить первый элемент - C++
Как в символьном массиве удалить первый элемент? Добавлено через 5 минут char s; for (i=1; i&lt;=strlen(s);i++) s+=s; Думаю...

Удалить первый элемент массива, кратный 3 - C++
Дан одномерный целочисленный массив из N элементов. Удалить из него первый элемент массива, кратный 3

Удалить первый и последний элемент очереди - C++
Нужна программа которая будет удалять первый и последний элемент очереди.

Односвязный список: удалить первый элемент - C++
День добрый уважаемые знатоки, начал разбираться с реализацией односвязных списков, вроде бы все как надо, но проблема в том что я не могу...


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.05.2012, 10:20     Удалить первый элемент из списка #10
Чистый, нет. Если в классе (обычно в конструкторе, но возможно, и при вызове каких-либо методов) происходит захват ресурса, который не может быть освобождён или в полной мере скопирован самостоятельно (выделение динамической памяти, открытие файла, открытие сокета и т.д.), то обязательно нужно писать конструктор копии, оператор присваивания и деструктор.
Yandex
Объявления
28.05.2012, 10:20     Удалить первый элемент из списка
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru