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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод значения в переменную типа string, память под которую выделена динамически http://www.cyberforum.ru/cpp-beginners/thread914507.html
Ребят, подскажите пожалуйста, как организовать ввод значения в переменную типа string, память под которую выделена динамически? #include<iostream> #include<string> using namespace std; int main() {
C++ Задумал написать программу имитирующую эффект матрицы 1 я проблема с которой столкнулся Я могу сделать это в консоли,но окно консоли имеет ограниченный размер, а мне очень бы хотелось на весь экран. 2 я проблема только учусь объектному мышлению, как бы лучше реализовать как класс или функционально? Буду благодарен за подсказки. Пользуюсь MSVisual Studio 2010. 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); ~CRectangle (); int area () {return (*width * *height);}
Вывод букв с помощью указателей (требуется помощь) 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
29.06.2013, 20:28  [ТС]     C++, удаление элемента из списка "контейнера"
@el_gato_de_Ch,нет код правильный, все выполняется правильно, просто нужно объяснить мне его, а именно как он понимает что нужно удалить первый элемент в функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//удаление элемента в начале вектора
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;
}
И как удаляет последний элемент, т.е. как находит и удаляет последний элемент в этой функции..

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[i];
  return temp2;
}
Я по самому заданию сейчас не помню, но по коду все верно написано.. видимо удалять должен

Добавлено через 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
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);  
};
а то что int *beg;//указатель на начало динамического массива , мы его чистим в функции, тем образом освобождаем память? или здесь как то по другому делается? ссори за глупый вопрос, для себя интересно)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru