Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 23.10.2009
Сообщений: 53
1

Шаблон класса вектор с двумя членами-данными

13.12.2010, 20:21. Просмотров 1247. Ответов 2
Метки нет (Все метки)

Здравствуйте Уважаемые. Нужна Ваша помощь в реализации программы:
Построить шаблон класса Vector. Определите класс Record (запись) с двумя членами-данными: count (количество) и price (цена). Упорядочить вектор из таких записей по каждому из членов.

Добавлено через 2 часа 5 минут
Помогите, пожалуйста. Очень надо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2010, 20:21
Ответы с готовыми решениями:

шаблон класса вектор
В общем говоря нужно описать методы вектора и перегрузки операций. Во всех контейнерах для...

Шаблон класса вектор
Реализовать шаблон контейнерного класса vector, который бы характеризовался поведением,...

Шаблон класса вектор
template <class T> class Vector { public: //? int size; T* data; public: Vector(int);...

шаблон класса вектор
Программа написана в qt при компиляции выдает ошибки - помогите разобраться. Вроде все написано...

2
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
13.12.2010, 23:46 2
Лучший ответ Сообщение было отмечено HanteR как решение

Решение

С тебя бутылка.
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
155
156
157
158
159
160
161
162
163
#include <iostream>
 
using namespace std;
 
template <class _Tp>
class Vector
{
public:
        typedef _Tp value_type;
        typedef value_type* pointer;
protected:
        pointer* _data_start;
        pointer* _data_finish;
        pointer* _data_end_of_storage;
 
        void quickSort(int left, int right, bool (*compare)(const _Tp&, const _Tp&))
        {
                int i = left, j = right;
                value_type pivot = at((left + right) / 2);
 
                /* partition */
                while (i <= j)
                {
                        while (compare(at(i), pivot))
                                i++;
                        while (compare(pivot, at(j)))
                                j--;
                        if (i <= j)
                        {
                                pointer tmp = _data_start[i];
                                _data_start[i] = _data_start[j];
                                _data_start[j] = tmp;
                                i++;
                                j--;
                        }
                };
 
                /* recursion */
                if (left < j)
                        quickSort(left, j, compare);
                if (i < right)
                        quickSort(i, right, compare);
}
 
 
 
public:
        Vector(int n, unsigned int max_capacity = 0) : _data_start(0), _data_finish(0), _data_end_of_storage(0)
        {
                if (n > max_capacity)
                        max_capacity = n+1;
                _data_start = new pointer[max_capacity];
                _data_finish = _data_start + n;
                _data_end_of_storage =_data_start + max_capacity;
 
                for (int i = 0; i<size(); i++)
                        _data_start[i] = new value_type;
        }
        Vector(void) : _data_start(new pointer[1]), _data_finish(_data_start), _data_end_of_storage(_data_start+1) {}
        Vector(const Vector<_Tp>& other)
        {
                _data_start = new pointer[other.capacity()];
                _data_finish = _data_start + other.size();
                _data_end_of_storage =_data_start + other.capacity();
 
                for (int i = 0; i<size(); i++)
                        _data_start[i] = new value_type(other[i]);
        }
 
        value_type& push_back(const value_type value)
        {
                if (!(_data_finish < _data_end_of_storage))
                        reserve(capacity()+2);
                *_data_finish = new value_type(value);
                _data_finish++;
        }
 
        void sort(bool (*compare)(const _Tp&, const _Tp&))
        {
                quickSort(0, size()-1, compare);
        }
 
        void reserve(int new_capacity)
        {
                pointer* _new_data_start = new pointer[new_capacity];
                int new_size = (size()>new_capacity)?new_capacity:size();
 
                for (int i = 0; i<new_size; i++)
                        _new_data_start[i] = _data_start[i];
 
                delete [] _data_start;
 
                _data_start = _new_data_start;
                _data_finish = _data_start + new_size;
                _data_end_of_storage = _new_data_start + new_capacity;
        }
 
        Vector<_Tp> operator= (const Vector<_Tp>& other)
        {
                if (this!=&other)
                {
                        if (_data_start!=0)
                                delete _data_start;
                        _data_start = new pointer[other.capacity()];
                        _data_finish = _data_start + other.size();
                        _data_end_of_storage =_data_start + other.capacity();
 
                        for (int i = 0; i<size(); i++)
                                _data_start[i] = new value_type(other[i]);
                }
                return *this;
        }
 
        value_type& operator[](unsigned int n) const { return *(_data_start[n]); }
        value_type& operator[](unsigned int n) { return *(_data_start[n]); }
 
        value_type& at(int n) const { return *(_data_start[n]); }
        value_type& at(int n) { return *(_data_start[n]); }
 
        unsigned int size() const { return (_data_finish - _data_start); }
        unsigned int capacity() const { return (_data_end_of_storage - _data_start); }
 
        ~Vector()
        {
                for (int i=0; i<size(); i++)
                        delete _data_start[i];
                delete [] _data_start;
        }
};
 
struct Record
{
        int count;
        int price;
        Record(int c, int p) : count(c), price(p) {}
};
 
bool by_count(const Record& a, const Record& b) { return a.count < b.count; }
bool by_price(const Record& a, const Record& b) { return a.price < b.price; }
 
int main()
{
        Vector<Record> A;
        Vector<Record> B;
 
        A.push_back(Record(2, 2));
        A.push_back(Record(1, 1));
        A.push_back(Record(3, 3));
        B = A;
 
        A.sort(by_count);
        B.sort(by_price);
 
        for (int i=0; i<A.size(); i++)
                cout << "(c: " << A[i].count << ", p: " << A[i].price << ") ";
        cout << endl;
 
        for (int i=0; i<B.size(); i++)
                cout << "(c: " << B[i].count << ", p: " << B[i].price << ") ";
        cout << endl;
 
        return 0;
}
2
1 / 1 / 0
Регистрация: 23.10.2009
Сообщений: 53
14.12.2010, 17:22  [ТС] 3
lemegeton, Аааа.... Спасибо большое!!! Очень выручил, очень помог! Еще раз спасибо!!)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2010, 17:22

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

шаблон класса вектор
На экзамене будет задание: создать шаблонный класс вектор с возможностью вывода...

Шаблон класса вектор с операциями индексации и функциями insert и erase
У меня есть задача. функции erase и insert я реализовала. но чтобы они работали нужно написать...

Создать шаблон класса, который обеспечивает действия над данными параметризованного массива
Как сделать динамический массив? #include&lt;iostream&gt; using namespace std; int main() { ...

Как правильно передать аргументы в шаблон функцию принимающую вектор класса?
Пытаюсь сделать функцию которая будет принимать вектор для класса Vehicle, выводить этот вектор и...


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

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

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