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

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

Восстановить пароль Регистрация
 
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 18:58     создать класс шаблон Vector #1
создать класс шаблон 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();
    
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
08.06.2013, 19:13     создать класс шаблон Vector #2
а где у вас метод push_back?
что это за конструктор такой странный?
C++
1
Vector(T *m=0, int n=0);
открывайте интернет и читайте, что такое вектор потому, что тут надо все переписывать
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 19:21  [ТС]     создать класс шаблон Vector #3
это не то что вы подумали, это не с библиотеки вектор, а вектор написанный самими, вот в чем и дело, я про push_back спрашивал, он сказал это класс вектор написанный нами.
Конструктор препод сам исправлял
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
08.06.2013, 19:23     создать класс шаблон Vector #4
Это Вы меня не поняли. Вы пишите класс вектор, аналогичный вектору из STL. Так где у вас в классе управление памятью? Резервирование? Тот же push_back? И все конструкторы?
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 19:33  [ТС]     создать класс шаблон Vector #5
как всегда, кроме тупой писанины на этом форуме ответа не получишь
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 19:52     создать класс шаблон Vector #6
Цитата Сообщение от dubistfuck Посмотреть сообщение
удалять нужно по значению
Что это значит?
Приходит в голову как удалить по индексу, для этого массив от индекса i до конца надо "сдвинуть влево" на один элемент, и размер вектора уменьшить на единицу.
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 19:56  [ТС]     создать класс шаблон Vector #7
вы у меня спрашиваете? я плюсы от силы 3 недели учу, не думаю что я бог плюсов, так что лучше вообще ничего не писать, чем воду лить.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 19:58     создать класс шаблон Vector #8
Если не знаешь - уточни у препода. То что ты не разбираешься в С++ это только твои проблемы, обижаться тут не надо.
Ты спросил как удалить элемент - я предложил вариант решения проблемы, если он тебя не устраивает то уж извини..
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 20:02  [ТС]     создать класс шаблон Vector #9
меня устраивает, но на словах все великие знатоки, а на деле 0.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 20:04     создать класс шаблон Vector #10
А я принципиально не хочу писать тебе реализацию такого простого алгоритма.
gehselber
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 6
08.06.2013, 20:09  [ТС]     создать класс шаблон Vector #11
так мне он не нужен, смысл от него - 0.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 20:40     создать класс шаблон Vector
Еще ссылки по теме:

Перегрузка функции(Создать класс Vector – вектор.) C++
Создать класс вектор Vector (int *). Перегрузить операции: C++
Класс vector. Создать список двумерных точек C++

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

Или воспользуйтесь поиском по форуму:
Taatshi
Администратор
 Аватар для Taatshi
11204 / 4789 / 247
Регистрация: 05.04.2011
Сообщений: 13,319
Записей в блоге: 2
08.06.2013, 20:40     создать класс шаблон Vector #12
Цитата Сообщение от dubistfuck Посмотреть сообщение
как всегда, кроме тупой писанины на этом форуме ответа не получишь
Это Вы такой вывод из 5 сообщений на форуме делаете? А Вы в курсе, что создание клонов у нас запрещено?
Yandex
Объявления
08.06.2013, 20:40     создать класс шаблон Vector
Ответ Создать тему
Опции темы

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