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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм Флойда - Уоршелла http://www.cyberforum.ru/cpp-beginners/thread210116.html
не получается реализовать алгоритм Флойда-Уоршелла, вроде все должнен выводить, а выводит или нули или вообще ничего, ошибок не выводит не понимаю в чем дело. вот код проги #include "stdafx.h" #include "iostream" #include "string.h" #include "conio.h" #include "stdlib.h" #include "stdio.h" int d; using namespace std;
C++ Найти сумму элементов строки матрицы, в которой расположен элемент с наименьшим значением ребята очень нужна помощь при выводе матрицы.Кто сможет помоч если сможет.Нада MFC AppWizard.exe проект и вот задание Дана действительная матрица размера m*n. Найти сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент един-ственный. С меня пивко... Добавлено через 5 часов 59 минут откликнетесь кто нибудь)) http://www.cyberforum.ru/cpp-beginners/thread210108.html
Сравнение методов сортировок массивов. Семестровая работа C++
Пишу семестровую по методам сортировки массивов. В моем варианте метод прямого выбора и метод Шейкера. Надо сравнить количество перестановок для различного числа элементов массива. n = 20, 40,60,...,10000. с- количество сравнений m - количество перестановок t - время работы функции сортировки Сравнение идет на 3 видах массивов почти упорядоченный, плохо упорядоченный и случайный. Я...
При чтении файла последний элемент повторяется дважды C++
появилась необходимость выучить работу с файлами за 9 часов #include <iostream> #include <time.h> #include <stdio.h> #include <stdlib.h> int main() {
C++ Расчет средневзвешенной оценки http://www.cyberforum.ru/cpp-beginners/thread210095.html
Написать программу для расчёта средневзвешенной оценки по предмету, средневзвешенной называетсяоценка, складывающаяся из 5 текущих оценок, но каждая из оценок имеет "вес" (коэффициент от 0 до 1). сумма коэффициенттов равна 1! Оценки и коэффициенты вводятся пользователем.
C++ Структура / системы координат Здраствуйте уважаемые знатоки! Есть задача по структурам: Надо описать структуры для декартовых (x,y) и полярных (r,pi) координат. Определить функцию для перевода из полярных в декартовы координаты. В ходе решения, на сколько я понимаю, нужны будут формулы переходов с одной системы координат в другую. Заранее спасибо! Добавлено через 3 часа 27 минут куку ? =) подробнее

Показать сообщение отдельно
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.12.2010, 23:46
С тебя бутылка.
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;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru