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

C++, удаление элемента из списка "контейнера" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод значения в переменную типа string, память под которую выделена динамически http://www.cyberforum.ru/cpp-beginners/thread914507.html
Ребят, подскажите пожалуйста, как организовать ввод значения в переменную типа string, память под которую выделена динамически? #include<iostream> #include<string> using namespace std; ...
C++ Задумал написать программу имитирующую эффект матрицы 1 я проблема с которой столкнулся Я могу сделать это в консоли,но окно консоли имеет ограниченный размер, а мне очень бы хотелось на весь экран. 2 я проблема только учусь объектному мышлению, как... http://www.cyberforum.ru/cpp-beginners/thread914506.html
Что за присвоение? C++
вот код с http://www.cplusplus.com/doc/tutorial/classes/ #include <iostream> using namespace std; class CRectangle { int *width, *height; public: CRectangle (int,int); ...
Вывод букв с помощью указателей (требуется помощь) C++
Есть программа которая считывает слова из файла input.txt до тех пор пока они не закончатся. Я хочу в массив address помещать указатель на первую букву каждого слова, а в массив word_leng записывать...
C++ Cоздать ключ с шейкерной сортировкой и 2умя счетчиками (количество подсчетов и количество сравнений) http://www.cyberforum.ru/cpp-beginners/thread914458.html
создать ключ с шейкерной сортировкой и 2умя счетчиками( количество подсчетов и количество сравнений)
C++ Наследование Полиморфизм Инкапсуляция Если можно добавьте коментарии в код #include<iostream> #include<iomanip> #define MAX 100 using namespace std; struct PRICE { char name_magazine; char name_gods; int stoimost; }; подробнее

Показать сообщение отдельно
deytas
-2 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 6

C++, удаление элемента из списка "контейнера" - C++

29.06.2013, 12:56. Просмотров 764. Ответов 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
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
lab9_main.cpp:
 
#include  "Vector.h"  
#include  <iostream>  
#include <conio.h>
 
using  namespace  std;  
int main()  
{
  //контролируемый блок  
try
  {
                int i; 
          int mm[5]={1,2,3,4,5};
          Vector x(5,mm);//вектор из двух элементов  
  cout<<x()<<endl; //выведем размер x
  cout<<x;//печать вектора х
  cout<<"i:";
  cin>>i;
  cout<<endl<<"x[i]:"<<x[i]<<endl;
//удалить один элемент в конце вектора
  --x;
  cout<<x;
//удалить один элемент в начале вектора
  x--;
cout<<x;
 
  --x;  --x;  --x;
  cout<<x;
   --x;
   cout<<x;
  }
  //обработчик исключения  
  catch(int)
  {cout<<"ERROR!!!"<<endl;}//сообщение об ошибке
 
  _getch();
  return 0;
}
 
 
__________________________________________________________________
 
Vector.cpp:
 
 
#include "vector.h"
 
Vector::Vector( int s)
{
  //если текущий размер больше максимального, то генерируется исключение  
if(s>MAX_SIZE) throw 1;
  size=s;
  beg=new int [s];
  for(int i=0;i<size;i++)
    beg[i]=0;
}
Vector::Vector( const  Vector &v)  
{
  size=v.size;
  beg=new int [size];
  for(int i=0;i<size;i++)
    beg[i]=v.beg[i];
}
Vector::~Vector()  
{
  if (beg!=0) delete[]beg;
}
Vector::Vector( int s,int *mas)  
{
//если текущий размер больше максимального, то генерируется исключение  
if(s>MAX_SIZE) throw 1;
  size=s;
  beg=new int[size];
  for(int i=0;i<size;i++)
    beg[i]=mas[i];
}
const  Vector& Vector:: operator  =(const  Vector &v)  
{
  if(this==&v)return *this;
  if(beg!=0) delete []beg;
  size=v.size;
  beg=new int [size];
  for(int i=0;i<size;i++)
    beg[i]=v.beg[i];
  return*this;
}
 
ostream&  operator <<(ostream&out,  const  Vector&v)  
{
  if(v.size==0) out<<"Empty\n";
  else
  {
  for (int i=0;i<v.size;i++)
    out<<v.beg[i]<<" ";
  out<<endl;
  }
  return out;
}
istream&  operator  >>(istream&in, Vector&v)  
{
  for(int i=0;i<v.size;i++)
  {
    cout<<">";
    in>>v.beg[i];
  }
  return in;
}
int Vector:: operator  [](int i)
{
  if(i<0)throw 2;//если индекс отрицательный, то генерируется исключение  
  //если индекс больше размер вектора, то генерируется исключение  
  if(i>=size) throw 3;// error( "Vector length more  than MAXSIZE \n");
  return beg[i];
}
Vector Vector:: operator  +(int a)
{
//если при добавлении элемента размер вектора станет больше максимального,
//то генерируется исключение  
if(size+1==MAX_SIZE) throw 4;
  Vector temp(size+1,beg);  
  temp.beg[size]=a;
  return temp;
}
 
int Vector:: operator()()//определение размера вектора
{
        return size;
}
 
//удаление элемента в начале вектора
Vector Vector:: operator  --()
{
//если вектор пустой, то удалить элемент нельзи и генерируется исключение  
if(size==0) throw 5;
  if (size==1)//если в вектор один элемент  
  {
    size=0;
    delete[]beg;
    beg=0;
    return *this;
  };
  Vector temp(size,beg);
  delete[]beg;
  size--;
  beg=new int[size];
  for(int i=0;i<size;i++)
    beg[i]=temp.beg[i];
  return*this;
}
 
//удаление элемента в конце вектора
Vector Vector:: operator  --(int)
{
        Vector temp2(*this);
//если вектор пустой, то удалить элемент нельзи и генерируется исключение  
if(size==0) throw 5;
  if (size==1)//если в вектор один элемент  
  {
    size=0;
    delete[]beg;
    beg=0;
    return *this;
  };
  Vector temp(size,beg);
  delete[]beg;
  size--;
  beg=new int[size];
  for(int i=1;i<=size;i++)
    beg[i-1]=temp.beg[i];
  return temp2;
}
 
___________________________________________________________________________
 
Vector.h:
 
#pragma once
 
#pragma  once
#include  <iostream>  
using  namespace  std;  
const  int MAX_SIZE=30;//максимальный размер вектора  
class  Vector  
{
  int size;//текущий размер
  int *beg;//указатель на начало динамического массива  
public :
  Vector(){size=0;beg=0;}//конструктор без параметров  
  Vector(int s);//конструктор с параметром  
  Vector(int s,int* mas);//конструктор с параметром  
  Vector(const Vector&v);//конструктор копирования  
  ~Vector();//деструктор
  const Vector& operator=(const Vector&v);//операция присваивания
  int operator[](int i);//доступ по индексу
  Vector operator+(int a);//добавление элемента
  int operator()();//определение размера вектора
  Vector operator--();//удаление элемента в начало вектора
  Vector operator--(int);//удаление элемента в начало вектора
//дружественные функции ввода -вывода  
  friend ostream& operator<<(ostream&out,const Vector&v);
  friend istream& operator>>(istream& in, Vector&v);  
};
(код рабочий)

Интересно как находит нужный элемент и удаляет, да и объяснить еще нужно как построчно...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//удаление элемента в начале вектора 
Vector Vector:: operator --() 
{ 
//если вектор пустой, то удалить элемент нельзи и генерируется исключение 
if(size==0) throw 5; 
if (size==1)//если в вектор один элемент 
{ 
size=0; 
delete[]beg; 
beg=0; 
return *this; 
}; 
Vector temp(size,beg); 
delete[]beg; 
size--; 
beg=new int[size]; 
for(int i=0;i<size;i++)>=temp.beg; 
return*this; 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//удаление элемента в конце вектора 
Vector Vector:: operator --(int) 
{ 
Vector temp2(*this); 
//если вектор пустой, то удалить элемент нельзи и генерируется исключение 
if(size==0) throw 5; 
if (size==1)//если в вектор один элемент 
{ 
size=0; 
delete[]beg; 
beg=0; 
return *this; 
}; 
Vector temp(size,beg); 
delete[]beg; 
size--; 
beg=new int[size]; 
for(int i=1;i<=size;i++) 
beg[i-1]=temp.beg; 
return temp2; 
}
с уважением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.