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

Список через массив - C++

Восстановить пароль Регистрация
 
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
04.10.2011, 01:52     Список через массив #1
мне не интересуют исходники меня интересуют два вопроса
1)массив должен быть постоянного размера?(ну то есть в конструктор передал n - таким и будет)
2)в задании написано
Код
Класс АТД реализовать как динамический массив. Для этого определение класса должно иметь следующие поля:
-указатель на начало массива
.....
но поскольку это массив то начало массива - нулевой элемент.или нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 01:52     Список через массив
Посмотрите здесь:

реализация стека через односвязный список C++
Реализация дека через список C++
C++ Множество через двусвязный список.
C++ Однозвязный список через template
Стек через связный список C++
C++ Список, ввод-вывод через fstream
Очередь через односвязный список C++
C++ Вывести список не через cout

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.10.2011, 02:01     Список через массив #2
Цитата Сообщение от Artishok Посмотреть сообщение
динамический массив
динамический массив подразумевает расширение

Добавлено через 25 секунд
Цитата Сообщение от Artishok Посмотреть сообщение
то начало массива - нулевой элемент.или нет?
на нулевой
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
04.10.2011, 19:43  [ТС]     Список через массив #3
Ну вот что у меня получилось(перегруженные операторы не работают(равенство не проверял но + и -- не пашут.и ещё не set методов)
ATD.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define MAX_ARRAY_SIZE 100
#include <iostream>
 
class ArrayList
{
  char *a;
  int count;
  int avaiblecapacity;
public:
    ArrayList(ArrayList& obj);
    ArrayList(int n);
    int GetSize();//текущий размер
    char GetHead();
    int GetElemsCount();
    void Add(char x);
    ~ArrayList();
    char &operator[](const int index);
    ArrayList &operator+(ArrayList x);
    void operator--();
    bool operator==(ArrayList x);//сравнивает с текущим объектом
    void ViewArray();
};
ATD.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
#include <iostream>
#include <stdlib.h>
#include "ATD.h"
ArrayList::ArrayList(int n)
{
    if (n<=MAX_ARRAY_SIZE)
    a=new char[n];
    avaiblecapacity=n;//доступная размерность
    count=0;
}
char& ArrayList::operator[](const int index)
{
    return a[index];
}
 
ArrayList::ArrayList(ArrayList& obj)
{
    for(int i=0;i<count;i++)
       obj[i]=a[i];
}
 
int ArrayList::GetSize()
{
    return avaiblecapacity;
}
 
int ArrayList::GetElemsCount()
{
    return count;
}
 
void ArrayList::Add(char x)
{
    count++;//добавился элемент
    if (count>MAX_ARRAY_SIZE)
       return;
    if (count>avaiblecapacity)//если больше того что выделяли до этого
    {
       char *b=new char[count];//больше памяти под массив
        for(int i=0;i<count-1;i++)//старый масссив перезаписываем в новый
          b[i]=a[i];
       b[count-1]=x;//последний элемент нового массива - только что добавленный
       delete[] a;//удаляем
       a=new char[count];//выделяем заново
       for(int i=0;i<count;i++)//с новым count в новый путь
          a[i]=b[i];//все элементы переприсваиваем
       delete[] b;
    }
    else
    a[count-1]=x;//предпоследнему добавленному - новое значение
}
 
char ArrayList::GetHead()
{
    return a[0];
}
 
ArrayList::~ArrayList()
{
    delete[] a;
    count=0;
    avaiblecapacity=0;
}
 
 
ArrayList& ArrayList::operator+(ArrayList x)
{
    ArrayList b(x.GetElemsCount()+GetElemsCount());//создаем новый массив их сумм их размерностей
    for(int i=0;i<x.GetElemsCount();i++)
       b[i]=x[i];//в начале разбираемся с первым
    for(int i=x.GetElemsCount();i<(x.GetElemsCount()+GetElemsCount());i++)
       b[i]=a[i];//теперь со вторым
    return b;
}
bool ArrayList::operator==(ArrayList x)
{
    bool f1;
    if (GetElemsCount()!=x.GetElemsCount())
       return false;
    for(int i=0;i<count;i++)
    {
       f1=false;
       for(int j=0;j<count;j++)
         if (a[i]==x[j])
            f1=true;
       if (f1==false)
          return f1;
    }
    return f1;
}
 
void ArrayList::operator--()
{
    char *c=new char[count-1];//Новый массив чуть меньше
    for(int i=1;i<count;i++)
       c[i]=a[i];//первого элемента не будет
    delete[] a;
    a=new char[count-1];//снова создаем уменьшенный
    for(int i=0;i<count-1;i++)//переприсваем
       a[i]=c[i];
    delete[] c;//очищаем и удаляем
    count=count-1;
}
 
void ArrayList::ViewArray()
{
    for(int i=0;i<count;i++)
       std::cout<<a[i]<<" ";
}
Добавлено через 15 часов 59 минут
при вызове
C++
1
x--;//ArrayList *x=new ArrayList(4)
вылетает.
Yandex
Объявления
04.10.2011, 19:43     Список через массив
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru