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

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

Войти
Регистрация
Восстановить пароль
 
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
#1

создать класс шаблон Vector - C++

08.06.2013, 18:58. Просмотров 1111. Ответов 11
Метки нет (Все метки)

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

первый класс 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "iostream"
 
using namespace std;
 
 
 
class array
{
    int  size;
    int *arr;
 
public:
    array(int = 0);
    array(const array &obj);
    ~array();
 
    array &operator = (const array &);
 
    void get();
    void rever();
    void show(void);
};
 
 
array :: array(int N)//конструктор с параметром
{
    this->size = N = 10;
 
    this->arr = new int[size];
 
 
    for(int i = 0; i < size; ++i)
        this->arr[i] = i + 1;
 
}
 
array :: array(const array &obj) : size(obj.size)//конструктор копии
{
    this->arr = new int[size];
 
    for(int i = 0; i < size; ++i)
        this->arr[i] = obj.arr[i];
}
 
array :: ~array()//деструктор
{
    delete[] arr;
}
 
void array :: get()
{
    for(int i = 0; i < size; ++i)
    {
        cout << "Enter array" << "[" << i + 1 << "]" << ":" << endl;
        cin >> arr[i];
 
    }
}
 
 
void array :: show(void)
{
    for(int i = 0; i < size;++i)
    {
        cout << "Result  array" << "[" <<  i << "]" << arr[i] <<  endl;
    }
}
 
 
void array :: rever()
{
    int d;
 
    for(int i = 0; i < size/2; ++i)
    {
        d = arr[i];
        arr[i] = arr[size  - i - 1];
        arr[size - i - 1] = d;
 
    }
 
    for(int i = 0; i < size; ++i)
    {
        cout << arr[i] << endl;
    }
 
}
 
void main()
{
    array a;
 
    a.get();
    a.show();
    a.rever();
 
 
 
}

вот по такому принципу и вектор сделал, ему не понравилось

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
                                                                    
                                             
#include <iostream>
#include <iomanip>
using namespace std;
 
template <typename T>
 
class Vector
{
    int size;
    T *mass;
public:
 
    Vector(T *m=0, int n=0);
    Vector(const Vector<T> &);
    ~Vector();
 
    void addVector();
    T deleteVector();
    void ShowVector();
};
 
template <typename T>
 
Vector <T> :: Vector(T *m, int n)
{
    this->size = n;
    this->mass = new T[this->size];
 
    for(int i = 0; i < size; i++)
        this->mass[i] = m[i];
}
 
template <typename T>
 
Vector<T> ::Vector(const Vector<T> &obj)
{
    this->size = obj.size;
    this->mass = new T(T *obj.mass, obj.size);
 
    for(int i = 0; i < obj.size; i++)
        this->mass[i] = obj.mass[i];
}
 
template <typename T>
 
Vector <T> :: ~Vector()
{
    if(this->mass)
        delete[] mass ;
}
 
template <typename T>
 
void Vector <T> :: addVector()
{
    
    cout << "VVedite kol elem massiva : " << endl;
    cin >> size;
    for(int i = 0; i < size; ++i)
    {
        cout << "Enter array " << endl;
        cout << i + 1 << ":" << endl;
        cin >> mass[i];
 
    }
 
}
 
 
 
template <typename T>
 
void Vector <T> ::ShowVector()
{
    cout << "Massiv :" << endl;
 
    for(int i = 0; i < size; i++)
    {
        cout << mass[i] << " " << endl;
    }
    
}
 
 
 
template <typename T>
 
T Vector <T> :: deleteVector()
{
    int del;
    int j, k;
    cout << "VVedite element dl9 udalenija :" << endl;
    cin >> del;
 
    for(int i = 0; i < size; i++)
    {
        if(mass[i] == del)
        {
            for( j = i; j < size - 1; j++) 
                mass[j] = mass[j + 1];
            j++;
            size--;
            i++;
            mass[j] = -1;
        }
        
    }
 
    for(int i = 0; i < size; i++)
        cout << mass[i] << endl;
 
    return 0;
}
 
 
void main()
{
    Vector<int> v;
 
 
    v.addVector();
    v.ShowVector();
    v.deleteVector();
    
 
}
тут обрыв на деструкторе, память не правильно, хз что делать, сказал что вектор не дожен заполняться, а должен добавляться, я хз как делать



сделал так, говорит удалять нужно по значению, и опять же память полностью не удаляется , мб кто поможет, нужно до завтра

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
 
int i;
template <typename T>
 
class Vector
{
    int size;
    T *mass;
 
public:
 
    Vector(T *m=0, int n=0);
    Vector(const Vector<T> &);
    ~Vector();
 
    void addVector(const T &);
    T deleteVector();
    void ShowVector();
};
 
template <typename T>
 
Vector <T> :: Vector(T *m, int n)
{
    this->size = n;
    this->mass = new T[this->size];
 
    for(int i = 0; i < size; i++)
        this->mass[i] = m[i];
}
 
template <typename T>
 
Vector<T> ::Vector(const Vector<T> &obj)
{
    this->size = obj.size;
    this->mass = new T(T *obj.mass, obj.size);
 
    for(int i = 0; i < obj.size; i++)
        this->mass[i] = obj.mass[i];
}
 
template <typename T>
 
Vector <T> :: ~Vector()
{
    if(this->mass)
        delete[] mass ;
}
 
template <typename T>
 
void Vector <T> :: addVector(const T &value)
{
    mass[i] = value;
    i++;
    size = i;
}
 
 
template <typename T>
 
T Vector <T> :: deleteVector()
{
    mass[i];
    size = i;
    return mass[i--];
}
 
template <typename T>
 
void Vector <T> :: ShowVector()
{
    cout << "Massiv :" << endl;
 
    for(int i = 0; i < size; i++)
    {
        cout << mass[i] << " " << endl;
    }
 
    
}
 
int menu()
{
    cout << "VVedite 1 - dobavit element : " << endl;
    cout << "VVedite 2 - udalit  element : " << endl;
    cout << "VVedite 3 - vsvesti resultat : " << endl;
    cout << " 0 - vuhod " << endl;
    int z;
    cin >> z;
    return z;
}
 
void main()
{
    Vector<int> v;
    
    
 
    while(int z = menu())
    {
        switch(z)
        {
        case 1 :
            {
                int j = 1;
                while(j != 0)
                {
                    cout << "dobav" << endl;
                    cin >> j;
                    if(j != 0)
                    v.addVector(j);
                }
                break;
            }
        case 2 :
            {
                int n = 1;
                while(n != 0)
                {
                    cout << "udal" << endl;
                    cin >> n;
                    if(n != 0)
                    v.deleteVector();
                }
                break;
            }
 
        case 3 :
            {
                v.ShowVector();
                break;
            }
 
        case 0 : exit;
 
        default :
            {
                cout << " vvedite cifri" << endl;
                break;
            }
        }
 
    }
    
    cin.get();
    
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос создать класс шаблон Vector (C++):

Создать класс Vector 2D - C++
Создать класс Vector для работы с векторами на плоскости, содержащий следующие члены класса: 1. Поля: • int х, у; 2. ...

Создать класс Vector (вектор целых чисел) - C++
Создать класс Vector (вектор целых чисел), переопределить для него операции: а) &quot;+=&quot; - сложение векторов с сохранением значения в одном...

Класс vector. Создать список двумерных точек - C++
Здравствуйте. Задача - используя библиотеку vector, создать список двумерных точек. При этом объект класса vector должен быть один ...

Перегрузка функции(Создать класс Vector – вектор.) - C++
Создать класс Vector – вектор, используя динамическую память. Определить операторы &quot;+&quot; – поэлементное сложения векторов, &quot;-&quot; –...

Создать класс вектор Vector (int *). Перегрузить операции: - C++
Создать класс вектор Vector (int *). Перегрузить операции: 1) ++ как унарный метод класса, возводящий элементы вектора в квадрат; 2) ...

Создать класс Vector – вектор, используя динамическую память - C++
Может кто подскажет листинг этой программы???

11
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
08.06.2013, 19:13 #2
а где у вас метод push_back?
что это за конструктор такой странный?
C++
1
Vector(T *m=0, int n=0);
открывайте интернет и читайте, что такое вектор потому, что тут надо все переписывать
0
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 19:21  [ТС] #3
это не то что вы подумали, это не с библиотеки вектор, а вектор написанный самими, вот в чем и дело, я про push_back спрашивал, он сказал это класс вектор написанный нами.
Конструктор препод сам исправлял
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
08.06.2013, 19:23 #4
Это Вы меня не поняли. Вы пишите класс вектор, аналогичный вектору из STL. Так где у вас в классе управление памятью? Резервирование? Тот же push_back? И все конструкторы?
0
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 19:33  [ТС] #5
как всегда, кроме тупой писанины на этом форуме ответа не получишь
0
castaway
Эксперт С++
4919 / 3027 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 19:52 #6
Цитата Сообщение от dubistfuck Посмотреть сообщение
удалять нужно по значению
Что это значит?
Приходит в голову как удалить по индексу, для этого массив от индекса i до конца надо "сдвинуть влево" на один элемент, и размер вектора уменьшить на единицу.
0
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 19:56  [ТС] #7
вы у меня спрашиваете? я плюсы от силы 3 недели учу, не думаю что я бог плюсов, так что лучше вообще ничего не писать, чем воду лить.
0
castaway
Эксперт С++
4919 / 3027 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 19:58 #8
Если не знаешь - уточни у препода. То что ты не разбираешься в С++ это только твои проблемы, обижаться тут не надо.
Ты спросил как удалить элемент - я предложил вариант решения проблемы, если он тебя не устраивает то уж извини..
0
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 20:02  [ТС] #9
меня устраивает, но на словах все великие знатоки, а на деле 0.
0
castaway
Эксперт С++
4919 / 3027 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 20:04 #10
А я принципиально не хочу писать тебе реализацию такого простого алгоритма.
0
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 20:09  [ТС] #11
так мне он не нужен, смысл от него - 0.
0
Taatshi
Администратор
11487 / 4956 / 253
Регистрация: 05.04.2011
Сообщений: 13,590
Записей в блоге: 2
08.06.2013, 20:40 #12
Цитата Сообщение от dubistfuck Посмотреть сообщение
как всегда, кроме тупой писанины на этом форуме ответа не получишь
Это Вы такой вывод из 5 сообщений на форуме делаете? А Вы в курсе, что создание клонов у нас запрещено?
0
08.06.2013, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 20:40
Привет! Вот еще темы с ответами:

Создать класс Vector – вектор, используя динамическую память - C++
Создать класс Vector – вектор, используя динамическую память. Определить операторы &quot;+&quot; – поэлементное сложения векторов, &quot;-&quot; – поэлементное...

Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector - C++
Народ!!! Please help me! Задолбался уже!:wall: Вобщем такое задание: Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector....

Создать шаблонный класс - ассоциативный массив, используя std::vector - C++
Задание выглядит так: &quot;Создать шаблонный класс – ассоциативный массив mymap с использованием STL-контейнера vector. Ключ и значение должны...

Создать шаблон класс Queue - C++
Создать шаблон класс Queue. Добавить след. методы: 1. добавление узла после заданного элемента 2. удаление последнего узла 3....


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

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

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