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

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

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

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

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

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

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

шаблон класса вектор - C++
На экзамене будет задание: создать шаблонный класс вектор с возможностью вывода информации,помещения информации и обработки информации ....

шаблон класса вектор - C++
Программа написана в qt при компиляции выдает ошибки - помогите разобраться. Вроде все написано правильно. template <class T, int Size>...

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

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

Шаблон класса вектор с операциями индексации и функциями insert и erase - C++
У меня есть задача. функции erase и insert я реализовала. но чтобы они работали нужно написать LOL& operator(int); Задача звучит...

Ошибка с статическими членами класса - C++
Доброго времени суток, форумчане! Недавно пришлось вернуться с С# на С++ и я тут же заметил что я все забыл( Итак по сути: Есть...

Объявление класса с открытыми членами. - C++
Всем привет! Уважаемые, не проясните ситуацию? В чем здесь ошибка? :)

Определить класс со следующими данными-членами : фамилия пассажира, номер рейса, стоимость билета, вес багажа - C++
Определить класс со следующими данными-членами : фамилия пассажира, номер рейса, стоимость билета, вес багажа. Вводить данные с клавиатуры...

Как вывести элементы вектора, являющиеся членами класса? - C++
#include <iostream> #include <vector> #include <cstdio> using namespace std; typedef struct moment{ int h,m,s; ...

Почему перегруженные операторы ввода/вывода нельзя сделать членами класса? - C++
Добрый вечер, Решаю домашнее задание, и вот вопрос возник. Создал класс и перегрузил ввода/вывод. Но не нашел информации почему...

вектор,шаблон - C++
можете написать итератор для класса уже неделю пишу не получается здесь T надо делать как структуру???? завтра сдавать,надеюсь на...

Обмен данными между двумя процессами - C++
Добрый день/вечер. Усердно слушал преподавателя на паре, прошуршал много литературы дома, но так и не понял, как заюзать обмен данными...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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, Аааа.... Спасибо большое!!! Очень выручил, очень помог! Еще раз спасибо!!)
Ответ Создать тему
Опции темы

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