Форум программистов, компьютерный форум, киберфорум
Наши страницы

Дек символов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Свежая книга по С++ (без архаизмов) http://www.cyberforum.ru/cpp-beginners/thread787113.html
Хочу идти в ногу со временем. Чтобы в книге, по которой буду учиться, было все с оглядкой на стандарт С++11. Например, раньше писали vector<int>::const_iterator itr = myvec.begin(); теперь можно...
C++ Работа со структурами Подскажите почему ничего не выводится? Когда жму CTRL-F5 выдаёт что есть ошибки, хотя в коде ничего не подсвечивается. #include <stdio.h> #include <stdlib.h> #include <string.h> #include... http://www.cyberforum.ru/cpp-beginners/thread787100.html
непредвиденная ошибка C++
сел за старый проект обнаружил такое: // Elemental war.cpp: главный файл проекта. #include "stdafx.h" #include "Form1.h" int main(array<System::String ^> ^args) {
Оператор switch. В чем ошибка? C++
Почему Свитч не отрабатывает? После ввода ans1 выводиться вопрос для цикла ДуВаил. Где я торможу? :( #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int...
C++ Работа со строками. Определить количество пробелов в строке и вывести на экран http://www.cyberforum.ru/cpp-beginners/thread787070.html
ввести строку символов.определить количество пробелов в строке и вывести на экран.вывести на экран символ,номер позиции которого соответствует количеству символов.если можно,с подробным объяснением.
C++ Не работает програма Код #include <iostream> #include <stdio.h> #include <math.h> using namespace std; int main () { double a,b,c,x,p; cout <<"Введите стороны треугольника\n"; cin >>a>>b>>c; p=(a+b+c)/2;... подробнее

Показать сообщение отдельно
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
23.02.2013, 14:33  [ТС]
Благодарю, уже разобрался - на лекции объяснили.
У меня теперь другая проблема. написал конструктор копирования и деструктор - по хожу дела очень коряво. При завершении работы пишет "Необработанное исключение в "0x00a020bc" в "task3.exe": 0xC0000005: Нарушение прав доступа при записи "0x00000004"."
Посмотрите пожалуйста, чего я не так опять сделал.
вот код
файл L2.h
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
#pragma once
 
class L2_elem
{
public: 
    char el;
    L2_elem* next;
    L2_elem* prev;
    L2_elem();                                      //занулить указатели
    L2_elem (char c, L2_elem* n,L2_elem* p);        //присваивание значений
    char get_el();
    L2_elem* get_n();
    L2_elem* get_p();
};
class L2 
{
 
    L2_elem* head;                              // голова
    L2_elem* tail;                              // хвост
public:
    L2();                                       // инициализация
    ~L2();                                      // деструктор
    L2(const L2 &List);                     // копирование
    //L2& operator = (const L2& List);          // оператор перегрузки
    bool isEmpty ();
    char popHead ();                            // получить элемент из начала списка
    char popTail ();                            // получить элемент из конца списка
    void pushHead (char c);                     // добавить элемент в начало списка
    void pushTail (char c);                     // добавить элемент в конец списка  
    void printHead ();                      // печать с головы
    void printTail();                   // печать с хвоста
    int size ();                            // размер списка
    void makeEmpty();
};
файл L2.cpp
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include <iostream>
#include "L2.h"
using namespace std;
L2_elem :: L2_elem()
    : prev(0), next(0)
{
    
}
char L2_elem :: get_el()
{
    return el;
}
 
L2_elem*  L2_elem :: get_p()
{
    return prev;
}
 
L2_elem :: L2_elem (char c, L2_elem* n,L2_elem* p)      //присваивание значений
{
    el = c;
    next = n;
    prev = p;
}
//реализация L2
L2 :: L2()
{
    head = 0;                                           // по умолчанию вызывается конструктор без параметров L2_elem
    tail = 0;
}
 
bool L2 :: isEmpty ()
{
    return head == 0;
} 
void L2 :: makeEmpty()
{   
    while (head !=0)
    {
        head = head->next;          
        delete head->prev;
    }
    head->next = 0;
}
 
L2 :: ~L2()
{
    makeEmpty();
}
L2 :: L2 (const L2 &List)
{
    L2_elem* temp = List.head;
    while (temp)
    {
        char c = temp->el;
        temp = temp->next;
        pushHead(c);
    }
}
void L2 :: pushHead (char c)                            // добавить элемент в начало списка
{
    L2_elem* NewEl = new L2_elem(c, head, 0);
    if ( isEmpty() )                                    // если список пуст
    {
        head = NewEl;                                   // делаем новый элемент головой
        tail = head;
    }
    else
    {
        head->prev = NewEl;
        head = NewEl;
    }
}
void L2 :: pushTail (char c)                            // добавить элемент в конец списка  
{
    L2_elem* NewEl = new L2_elem(c,0,tail); 
    if ( isEmpty() )                                    // если список пуст
    {
        tail = NewEl;                                   // делаем новый элемент хвостом
        head = tail;
    }
    else
    {
        tail->next = NewEl;
        tail = NewEl;
    }
}
 
char L2 :: popHead () 
{
    if ( isEmpty() ) return 0;  
    char c = head->el;    
    if ( head->next == 0 )                              // если в списке всего 1 элемент
    {
        delete head;                                    // удаляем его
        head = 0;                                       // и говорим, что список пуст
        tail = 0;
    }
    else 
    {
        head = head->next;                              // сдвигаем tail на предыдущий элемент
        delete  head->prev;                             // и удаляем старый последний элемент
        head->prev = 0;
    }
 
    return c;
}
 
char L2 :: popTail () 
{
    if ( isEmpty() ) return 0; 
 
    char c = tail->el;
    
    if ( tail->prev == 0 )                              // если в списке всего 1 элемент
    {
        delete tail;                                    // удаляем его
        head = 0;                                       // и говорим, что список пуст
        tail = 0;
    }
    else 
    {
        tail = tail->prev;                              // сдвигаем tail на предыдущий элемент
        delete ( tail->next );                          // и удаляем старый последний элемент
        tail->next = 0;
    }
 
    return c;
}
 
void L2 :: printHead()
{
    L2_elem* temp = head;
    
    while (temp)
    {
        cout << temp->el << " ";
        temp = temp->next;
    }
    cout << endl;
}
 
void L2 :: printTail()
{
    L2_elem* temp = tail;
    while (temp)
    {
        cout << temp->el << " ";
        temp = temp->prev;
    }
    cout << endl;
}
 
int L2 :: size()
{
    L2_elem* temp = head;
    int size = 0;
    while (temp)
    {       
        temp = temp->next;
        size++;
    }
    return size;
}
на всякий случай оставил все функции, может еще где косяки есть
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.