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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
#1

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

04.10.2011, 01:52. Просмотров 460. Ответов 2
Метки нет (Все метки)

мне не интересуют исходники меня интересуют два вопроса
1)массив должен быть постоянного размера?(ну то есть в конструктор передал n - таким и будет)
2)в задании написано
Код
Класс АТД реализовать как динамический массив. Для этого определение класса должно иметь следующие поля:
-указатель на начало массива
.....
но поскольку это массив то начало массива - нулевой элемент.или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 01:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список через массив (C++):

Как в массив скопировать массив, который заполнен через указатели - C++
Есть два файла допусти. Суть вопроса в том, что находится во втором файле. Как записать? car.h struct car { float massiv; ...

Множество через двусвязный список. - C++
Необходимо реализовать класс множество через двусвязный список. Но проблема у меня стоит в том, что тему списки я не очень понял, когда...

Однозвязный список через template - C++
Помогите разобрать код в тех местах где я поставил //???? . Код не мой, и указатели я не очень хорошо понимаю. #include <iostream> ...

Реализация дека через список - C++
надо реализовать дек через список.очевидно что список должен быть двунаправленным а)как проверить является ли пустой голова/хвост? ...

Очередь через односвязный список - C++
Здравствуйте :) Собственно сам вопрос: почему выводи "1 0", а не "0 1"? #include <iostream> #include <string> template < typename...

Стек через связный список - C++
Здравствуйте мне нужно переделать стек через указатели и связный список. #include <iostream> #include <locale.h> using namespace...

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

Добавлено через 25 секунд
Цитата Сообщение от Artishok Посмотреть сообщение
то начало массива - нулевой элемент.или нет?
на нулевой
1
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)
вылетает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2011, 19:43
Привет! Вот еще темы с ответами:

Вывести список не через cout - C++
Помогите доделать прогу. Задание на картинке 4.10 вот что я уже сделал, не могу сделать вывод 8 категорий указанных внизу задания. Вернее...

Отсортировать двусвязный список через указатели - C++
До последнего пытался решить полностью задачу сам, но никак не могу отсортировать элементы в алфавитном порядке через указатели. Очень...

Получение значения через список параметров - C++
Доброго времени суток! есть переменная: int *X=NULL; Необходимо передать её адрес в функцию в которой выделяется для неё память и...

Список, ввод-вывод через fstream - C++
Подскажите плс почему у меня вывод в файл не хочет делать?((( Это програма списка структур. Считывает данные с файла (файл текстовый в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru