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

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

Восстановить пароль Регистрация
 
HanteR
1 / 1 / 0
Регистрация: 23.10.2009
Сообщений: 53
13.12.2010, 20:21     Шаблон класса вектор с двумя членами-данными #1
Здравствуйте Уважаемые. Нужна Ваша помощь в реализации программы:
Построить шаблон класса Vector. Определите класс Record (запись) с двумя членами-данными: count (количество) и price (цена). Упорядочить вектор из таких записей по каждому из членов.

Добавлено через 2 часа 5 минут
Помогите, пожалуйста. Очень надо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2010, 20:21     Шаблон класса вектор с двумя членами-данными
Посмотрите здесь:

C++ Создать класс время с данными-членами часы, минуты, секунды
Шаблон класса вектор C++
C++ шаблон класса вектор
Объявление класса с открытыми членами. C++
Ошибка с статическими членами класса C++
шаблон класса вектор C++
шаблон класса вектор C++
Шаблон класса вектор с операциями индексации и функциями insert и erase C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
13.12.2010, 23:46     Шаблон класса вектор с двумя членами-данными #2
С тебя бутылка.
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;
}
HanteR
1 / 1 / 0
Регистрация: 23.10.2009
Сообщений: 53
14.12.2010, 17:22  [ТС]     Шаблон класса вектор с двумя членами-данными #3
lemegeton, Аааа.... Спасибо большое!!! Очень выручил, очень помог! Еще раз спасибо!!)
Yandex
Объявления
14.12.2010, 17:22     Шаблон класса вектор с двумя членами-данными
Ответ Создать тему
Опции темы

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