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

Создать шаблонный класс-контейнер Array, который представляет собой массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.67
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
08.07.2010, 14:50     Создать шаблонный класс-контейнер Array, который представляет собой массив #1
Создать шаблонный класс-контейнер Array, который представляет собой массив, позволяющий хранить объекты заданного типа. Класс должен реализовывать следующие функции:
Вот пытаюсь создать класс который представляет собой массив, не могу понять как это сделать...
Как в массив записывать данные, как изменять их, как выделять правильно динамическую память...

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
#include<iostream>
#include<time.h>
using namespace std;
 
template <typename T>
struct Elem
{
   T *mass;
   int razmer;
   Elem * next, * prev;
};
 
template <typename T>
class Array
{
   Elem<T> * Head, * Hvost;
   int Count;
   int size;
public:
   Array();
   Array(int);
   Array(const Array&);
   ~Array();
   void Getsize();
   void SetSize(int size, int grow);
   void GetUpperBound();
   bool IsEmpty();
   void FreeExtra();
   void RemoveAll();
   void GetAt(int pos);
   void SetAt(int pos);
   Array &operator[](const Array&);
   Array& operator=(const Array&);
   void Add();
   void Append(const Array&);
   void GetData();
   void InsertAt(int pos);
   void RemoveAt(int pos);
   void Show(const Array&);
};
template <typename T>
Array<T>::Array()
{
    Count=0;
    Head=Hvost=NULL;
    size=0;
}
template <typename T>
Array<T>::Array(int n)
{
    Elem<T> *temp;
    temp->mass=new int[n];
    temp->razmer=n;
    for(int i=0;i<n;i++)
        temp->mass[i]=rand()%20;
    Count=0;
    Head=Hvost=NULL;
    size=0;
}
template <typename T>
Array<T>::Array(const Array &N)
{
    Elem<T> *temp=N.Head;
    while(temp!=0){
        AddHvost(temp->mass);
        temp=temp->next;
 
    }
}
template <typename T>
void Array<T>::Show(const Array&N)
{
    Elem<T> *temp=N.Head;
    while(temp!=0){
        for(int i=0;i<temp->razmer;i++)
        cout<<temp->mass<<" ";
        temp=temp->next;
 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2010, 14:50     Создать шаблонный класс-контейнер Array, который представляет собой массив
Посмотрите здесь:

C++ Создать базовый класс Array, в котором определите поле-массив подходящего типа
Создать шаблонный класс - ассоциативный массив, используя std::vector C++
написать такой класс, который представляет собой двоичное число C++
шаблонный класс array(C++11) C++
C++ Создать шаблонный класс - двумерный динамический массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.07.2010, 16:22     Создать шаблонный класс-контейнер Array, который представляет собой массив #2
Цитата Сообщение от Crudelis Посмотреть сообщение
Класс должен реализовывать следующие функции:
... и на этом мысль прерывается. Опишите, какие именно функции в задании требуются (просто слово в слово перепишите). А то глядя на
Цитата Сообщение от Crudelis Посмотреть сообщение
void GetData();
попробуй угадай, что должна делать такая вот функция...
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
08.07.2010, 19:15  [ТС]     Создать шаблонный класс-контейнер Array, который представляет собой массив #3
GetSize - получение размера массива (количество элементов, под которые выделена память)
SetSize(int size, int grow = 1) - установка размера массива (если параметр size больше предыдущего размера массива, то выделяется дополнительный блок памяти, если нет, то "лишние" элементы теряются и память освобождается); параметр grow определяет для какого количества элементов необходимо выделить память, если количество элементов превосходит текущий размер массива. Например, SetSize(5, 5); означает, что при добавлении 6-го элемента размер массива становится равным 10, при добавлении 11-го - 15 и т. д.
GetUpperBound - получение последнего допустимого индекса в массиве. Например, если при размере массива 10, вы добавляете в него 4 элемента, то функция вернет 3.
IsEmpty - массив пуст?
FreeExtra - удалить "лишнюю" память (выше последнего допустимого индекса)
RemoveAll - удалить все
GetAt -получение определенного элемента (по индексу)
SetAt - установка нового значения для определенного элемента (индекс элемента должен быть меньше текущего размера массива)
operator [] - для реализации двух предыдущих функций
Add - добавление элемента в массив (при необходимости массив увеличивается на значение grow функции SetSize)
Append - "сложение" двух массивов
operator =
GetData - получения адреса массива с данными
InsertAt - вставка элемента(-ов) в заданную позицию
RemoveAt - удаление элемента(-ов) с заданной позиции



easybudda, я не прошу чтоб программу за меня написали, я прошу помощь разобраться как реализовать сам класс с возможностью менять размер массива, добавлять элементы в список, где их данными являются массивы, как работать в классе с структурой в которой массив....

Добавлено через 1 минуту
я застрял на месте, где нужно в конструкторе как то выделит память под массив структуры... определенного типа данных(текст/символ) задаваемый в шаблоне

Добавлено через 29 минут
это двух связные списки, вот надо как то реализовать чтоб в качестве данных был массив и размер массива, т.е. два поля назовем их так

Добавлено через 2 часа 18 минут
вопрос открыт, кто может подсказать что нибудь
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
08.07.2010, 20:15     Создать шаблонный класс-контейнер Array, который представляет собой массив #4
Проще всего "спионерить" схему, по которой работает vector. Выделять память под все элементы единым непрерывным куском. При изменении размера выделить новый кусок, перебросить туда данные из старого, освободить старый.
Причина, по которой для хранения данных в приведённом коде выбран список, да ещё и двусвязный, мне неясна.
Когда разберёмся с этим вопросом, можно переходить дальше.
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
08.07.2010, 21:00  [ТС]     Создать шаблонный класс-контейнер Array, который представляет собой массив #5
Цитата Сообщение от Nick Alte Посмотреть сообщение
Причина, по которой для хранения данных в приведённом коде выбран список, да ещё и двусвязный, мне неясна
дело в том что когда учишься в институте, есть своя программа обучения, т.е. всё идет по очереди, сейчас мы изучаем двухсвязные списки, по этому необходимо эту программу сделать с помощью списков, далее мы будем изучать векторы наверное, только тогда я смогу реализовать эту программу на основе векторов
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
08.07.2010, 22:59     Создать шаблонный класс-контейнер Array, который представляет собой массив #6
Я не говорил "на основе векторов", я говорил "по сходному принципу", заодно и описал сам этот несложный принцип. Это раз. Думаю, динамическое выделение памяти под массивы вы уже проходили. Это два. Реализовывать массив через список - нелепица и надевание трусов через голову, да и задание явно написано именно под массивы, а не под списки, это три.
Если всё же приспичило делать "массив" столь экстравагантным образом, то реализовывать основные пункты придётся так:
- объекту придётся хранить указатели на начало списка, на первый незанятый элемент и на конец списка;
- придётся хранить текущий размер массива, количество занятых элементов и текущее количество добавляемых элементов (grow);
- объём массива держать в самом объекте, корректно обновляя его после изменяющих размер операций;
- добавление места под M элементов производить посредством M добавлений узлов к хвостовому, с заполнением значениями по умолчанию;
- удаление M элементов (М<=N, где N - количество элементов) производить посредством M удалений последнего заполненного элемента (т.е. в общем случае из середины списка, в частном случае N = R, где R - размер массива с учётом резерва, удаление будет производиться из конца списка);
- поиск элемента с индексом I<N производить путём отсчёта I элементов от первого;
Кроме того, будет мышиная возня с зарезервированными элементами при добавлении в середину массива и удалении из середины. Хочу ещё раз подчеркнуть, что вообще эта возня с дополнительно резервируемыми местами не имеет никакого смысла при работе со списками, но оправдана при работе с цельнокусковыми массивами.
Так что я очень советую уточнить, действительно ли вам надо делать это задание через списки.
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
09.07.2010, 00:13  [ТС]     Создать шаблонный класс-контейнер Array, который представляет собой массив #7
Nick Alte, дело в том что мы изучаем списки и задание относиться именно к спискам! Спасибо за алгоритм, буду разбираться
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2010, 22:03     Создать шаблонный класс-контейнер Array, который представляет собой массив
Еще ссылки по теме:

Ассоциативный контейнер и шаблонный класс C++
C++ Необходимо реализовать шаблонный класс Array, и грамотно реализовать push_back
Как создать шаблонный класс-массив для хранения объектов? C++

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

Или воспользуйтесь поиском по форуму:
alterwiz
Сообщений: n/a
10.07.2010, 22:03     Создать шаблонный класс-контейнер Array, который представляет собой массив #8
Цитата Сообщение от Crudelis Посмотреть сообщение
Nick Alte, дело в том что мы изучаем списки и задание относиться именно к спискам! Спасибо за алгоритм, буду разбираться
Дружище, в этом же уроке рассматриваются тимплейты. 3я задача на них а не на списки
Yandex
Объявления
10.07.2010, 22:03     Создать шаблонный класс-контейнер Array, который представляет собой массив
Ответ Создать тему
Опции темы

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