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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
#1

Реализовать упрощенный контейнер "вектор" - C++

10.05.2012, 23:05. Просмотров 1417. Ответов 14
Метки нет (Все метки)

Да, знаю, что тема избитая, но:
Стоит такой вопрос "Чем отличается шаблонный класс от контейнера в данном случае - Реализовать шаблон класса vector, реализующий динамический массив, но в первом случае, как шаблонный класс, а во втором, как контейнер с итератором самописным"?
Сделал шаблонный класс, чем должен отличаться контейнер?
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
#include <iostream>
using namespace std;
 
template <class T>
class vector
{
    T *arr;
    unsigned int size;
    int index;
public:
    vector() : size(0), index(), ms(NULL) {}
    vector(unsigned int size)
    {
        vector::size = size;
        vector::arr = new T[size];
        vector::index = 0;
    }
    ~vector()
    {
        if(arr)
        delete [] arr;
    }
    int add(T value)
    {
        if(index == size)
            return 0;
        else
        {
            arr[index] = value;
            index++;
        }
        return 1;
    }
    void show()
    {
        if(size == 0)
            cout << "Vector is empty" << endl;
        for(int i = 0; i < index; i++)
            cout << arr[i] << " ";
        cout << endl;
    }
    bool del(unsigned int num)
    {
        if(num > index)
        {
            cout << "Vector doesn't contains such amount of elements";
            return 0;
        }
        else if(num == index)
        {
            size = 0;
            delete [] arr;
            return 0;
        }
        else
        {
            T *temp;
            temp = new T[size - num];
            for(int i = num, j = 0; i < index; i++, j++)
                temp[j] = arr[i];
            delete [] arr;
            arr = new T[index - num];
            for(int i = 0; i < index - num; i++)
                arr[i] = temp[i];
            delete [] temp;
            vector::index -= num; 
        }
    }
 
};
 
int main ()
{
    vector<int> lol(12);
    lol.add(2);
    lol.add(2);
    lol.add(3);
    lol.add(4);
    lol.add(5);
    lol.show();
    lol.del(3);
    lol.show();
 
    return 0;
 
}
Добавлено через 42 минуты
апдт.

Добавлено через 1 час 19 минут
Всё ещё актуально :C
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 23:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать упрощенный контейнер "вектор" (C++):

Создать классы "Вектор" и "Матрица", реализовать умножение матрицы на вектор - C++
Создать классы «Вектор (Строка, столбец)» и «Матрица». Реализовать умножение матрицы на вектор. я задал класс матриц,а как мне задать...

Динамическая структура данных(контейнер) типа "Вектор" - C++
Здравствуйте, у меня вот какая проблема:задали лабораторную работу, но я что то никак не могу понять как ее делать, дело в том, что в ней...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Наследуемым классом для комплексного числа объявить класс "радиус-вектор", имеющий данные "длина" и "угол" - C++
кто то напишите пожалуйста, вот программа: наследуемым классом для комплексного числа объявить класс &quot;радиус-вектор&quot;, имеющий данные...

Перегрузка функций "ввести в поток", "вывести с потока", "умножить вектор на число" - C++
Подскажите пожалуйста, как убрать ошибки с этой программы? (делала перегрузку &quot;ввести в поток&quot; и &quot;вывести с потока&quot;, а также &quot;умножить...

Реализовать структуру "Анкета" с полями "Фамилия", "Пол" и "Адрес" - C++
Здравствуйте. Проходим тему Структуры, не могу понять, как определить количество, само задание: #include &lt;iostream&gt; #include...

14
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
10.05.2012, 23:48 #2
ну контейнером может называться любой класс который содержит в себе элементы...

Цитата Сообщение от cetrael Посмотреть сообщение
в первом случае, как шаблонный класс, а во втором, как контейнер с итератором самописным
вопрос из разряда "хочу 1 машину красного цвета, и 2ую чтобы там был кондей и подушка..."

про итераторы:
http://www.darkraha.com/rus/cpp/stl/stl08.php
0
cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
12.05.2012, 23:41  [ТС] #3
Цитата Сообщение от OstapBender Посмотреть сообщение
ну контейнером может называться любой класс который содержит в себе элементы...


вопрос из разряда "хочу 1 машину красного цвета, и 2ую чтобы там был кондей и подушка..."

про итераторы:
http://www.darkraha.com/rus/cpp/stl/stl08.php
Если честно, не совсем понял, что имелось в виду.
Я взял и допилил к своему шаблонному классу итератор. Теперь у меня тот же класс, но с итератором :C
Задание звучит так: сделать вектор, реализующий динамический массив, в первом случае, как ШК, а во втором как контейнер. На чем они акцентировались, и что они от меня хотят :C
0
Avazart
Эксперт С++
7246 / 5418 / 297
Регистрация: 10.12.2010
Сообщений: 24,042
Записей в блоге: 17
13.05.2012, 03:16 #4
Думаю важно что бы контейнер был обормлен как стандартный и был совместим с стандартными алгоритмами, биндами и тп.

Ну там есть еще вещь такая как аллокатор, но то мелочь...
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 09:22 #5
Естественно, что STL vector был построен на шаблонном классе!
Ну вы можете проделать это ещё раз
Шаблонный класс вектора работает на динамическом массиве (на сколько я помню)
http://www.cplusplus.com/reference/stl/ О контейнерах в с++
Задание не корректно, с моей точки зрения, особенно та фраза "реализующий динамический массив", массив чего? Если не
известно чего, тогда он тоже шаблонный =)
Ещё есть 1 вариант: Под ШК подразумевают положить вверх, положить вниз, удалить сверху , удалить снизу, ну или что то в этом роде
Хотя тот же map уже дерево
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
13.05.2012, 12:39 #6
....................
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 12:57 #7
хм... я перечитал ваш вопрос и пришёл к выводу, что в случае контейнера от вас хотят, чтобы каждому индексу динамического массива соответсвовал итератор (произвольное 32 битное значение) и например, удаление происходит только по итератору
0
Avazart
Эксперт С++
7246 / 5418 / 297
Регистрация: 10.12.2010
Сообщений: 24,042
Записей в блоге: 17
13.05.2012, 17:15 #8
Хотя тот же map уже дерево
Это почему? по тому что сортируют?
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 17:34 #9
Простите, std::map - это, как правило, контейнер с реализацией при помощи красно-чёрного дерева, разве я ошибаюсь? (STL)
http://www.youtube.com/watch?feature=player_embedded&v=vDHFF4wjWYU#!
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
13.05.2012, 17:41 #10
Ternsip, std::map
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 17:47 #11
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ternsip, std::map
1)Безобразие, смотрите выше я кидал ссылку (http://www.cplusplus.com/reference/stl/)
2)К чему вы мне кинули эту ссылку?
3)Под своей фразой я подразумевал, что массив упорядочен и хранится при помощи красно-чёрного дерева
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
13.05.2012, 17:49 #12
Цитата Сообщение от Ternsip Посмотреть сообщение
К чему вы мне кинули эту ссылку?
Где вы там хоть слово увидели о дереве? Данные хранятся парами, содержащей ключ и значение.
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 18:08 #13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Где вы там хоть слово увидели о дереве? Данные хранятся парами, содержащей ключ и значение.
Ну прошу вас, не пугайте меня... откуда там напишут как хранятся и упорядочиваются данные ?
Это мы управляем парами . добавляем пары, получаем пары (Кстати уже от итераторов)

http://ru.wikipedia.org/wiki/%D0%9A%...B5%D0%B2%D0%BE

Посмотрите там раздел Работа с красно-чёрными деревьями и убедитесь

Цитирую по ссылке :
Красно-чёрные деревья являются одними из наиболее активно используемых на практике самобалансирующихся деревьев поиска. В частности, контейнер map в большинстве реализаций библиотеки STL языка C++[1], класс TreeMap языка Java[2], так же, как и многие другие реализации ассоциативного массива в различных библиотеках, основаны на красно-чёрных деревьях.

В случае несогласия, прошу окончить священную войну
0
Avazart
Эксперт С++
7246 / 5418 / 297
Регистрация: 10.12.2010
Сообщений: 24,042
Записей в блоге: 17
13.05.2012, 18:12 #14
Где вы там хоть слово увидели о дереве? Данные хранятся парами, содержащей ключ и значение.
Хранятся так что бы была максимальная скорость выборки на основе ключей.
И это поидее можно сделать с помощью дерева, но неуверен что там именно так реализовано
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
13.05.2012, 18:13 #15
Цитата Сообщение от Avazart Посмотреть сообщение
И это поидее можно сделать с помощью дерева, но неуверен что там именно так реализовано
Я про то же, возможно, это зависит от реализации компилятора.
0
13.05.2012, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2012, 18:13
Привет! Вот еще темы с ответами:

Разработать класс "вектор" и реализовать операцию векторного умножения векторов - C++
Разработать класс &quot;вектор&quot; и реализовать операцию векторного умножения векторов #include &lt;vcl.h&gt; #include &lt;vector&gt; #include...

Разработать класс "Вектор" и реализовать операцию векторного умножения векторов - C++
тема классы C++ !! разработать класс вектор и реализовать операцию векторного умножения векторов(develop and implement a class of vector...

Нужно разработать класс "вектор" и реализовать операцию векторного умножения векторов - C++
Помогите, пожалуйста, не могу разобраться что не так ! #include &lt;vcl.h&gt; #include &lt;vector&gt; #include &lt;conio.h&gt; #include...

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


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

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

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