Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 19:57   #1
DOJ
Пользователь
 
Регистрация: 11.06.2009
Сообщений: 19
По умолчанию Список в виде массива в с++

Здравствуйте, дорогие форумчане. Не могли бы вы помочь в данном вопросе, дело в том что не могу написать даже маленький фрагмент кода реализации списка в виде массива, не могли бы вы привести не большой пример, хотя бы добавления элемента в данный список?! Или хотя объяснить или подсказать решение этой проблемы. Заранее благодарю.

P.S. просьба не оскорблять, все мы учимся или учились.
DOJ вне форума Ответить с цитированием
Старый 28.10.2009, 17:29   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Пример с динамическим массивом.
Код:
#include <iostream>
#include <conio.h>
using namespace std; 

class LIST
{
 private:
  int num;
  int *mas;
 public:
  LIST() { num=0; mas=NULL; }
  ~LIST()
   { if(mas) delete mas; }
  void add(int el); 
  void print();   
  void clear();  
};

void LIST::add(int el)
{
 int *tmp,i;
 tmp = new int[num+1];
 memcpy(tmp,mas,num*sizeof(int)); // копируем то, что есть
 tmp[num++] = el;  // и добавляем еще один элемент
 delete[] mas;
 mas = tmp;
}
void LIST::print()
{
 int i;
 for(i=0; i<num; ++i)
  cout<<mas[i]<<" ";
}
void LIST::clear()
{
 if(mas) delete mas;
 mas = NULL;
}

int main()
{
	LIST M;
	M.add(1);
	M.add(2);
	M.add(3);
	M.print();
	M.clear();
		
	getch();
	return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 30.10.2009 в 00:04. Причина: ошибочка небольшая
Sazary вне форума Ответить с цитированием
Старый 29.10.2009, 16:14   #3
DOJ
Пользователь
 
Регистрация: 11.06.2009
Сообщений: 19
По умолчанию

Спасибо огромное буду разбираться.
DOJ вне форума Ответить с цитированием
Старый 29.10.2009, 17:56   #4
rangerx
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 46
По умолчанию

Цитата:
~LIST()
{ if(mas) delete mas; }
При применении delete к нулевому указателю просто ничего не произойдёт. Проверка тут лишняя.
rangerx вне форума Ответить с цитированием
Старый 29.10.2009, 19:03   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Код:
 private:
  int *mas;
...
 int *tmp,i;
 tmp = new int[num+1];
...
 mas = tmp;
}
...
delete mas;
Только раз уж выделяете массив, то и освобождать надо тоже массив )
Код:
delete[] mas;
netrino вне форума Ответить с цитированием
Старый 30.10.2009, 00:07   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

netrino, да, спасибо ) Торопился..

Цитата:
Сообщение от rangerx
При применении delete к нулевому указателю просто ничего не произойдёт. Проверка тут лишняя.
У меня была пара инцендентов, когда вылетала ошибка. Поэтому на всякий случай добавляю )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.10.2009, 23:53   #7
girkoff
Пользователь
 
Регистрация: 07.11.2008
Сообщений: 71
По умолчанию

Объясните кто нибудь зачем нужен этот ддиструктор:
Код:
 LIST() { num=0; mas=NULL; }
  ~LIST()
   { if(mas) delete mas; }
и вообще как его можно использовать
Если долго мучаться, что нибудь получится!!!
girkoff вне форума Ответить с цитированием
Старый 30.10.2009, 23:57   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от girkoff Посмотреть сообщение
Объясните кто нибудь зачем нужен этот ддиструктор:
Код:
 LIST() { num=0; mas=NULL; }
  ~LIST()
   { if(mas) delete mas; }
и вообще как его можно использовать
Деструктор нужен, чтобы освободить память, выделенную под массив, иначе может быть утечка памяти. Используется он автоматически, то есть явно к нему обращаться не надо. Деструктор вызывается при разрушении объекта класса.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация стека в виде массива DOJ C++ Builder 21 22.10.2009 20:18
Реализация стека в виде массива DOJ Общие вопросы C/C++ 0 29.09.2009 18:37
Данные из буфера обмена в виде массива байтов eda Microsoft Office Excel 10 12.08.2009 17:00
Запомнить результат в виде массива Georgia Помощь студентам 4 22.05.2008 16:14
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44