Форум программистов, компьютерный форум 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++ Сравнение методов сортировок массивов. Семестровая работа Пишу семестровую по методам сортировки массивов. В моем варианте метод прямого выбора и метод Шейкера. Надо сравнить количество перестановок для различного числа элементов массива. n = 20, 40,60,...,10000. с- количество сравнений m - количество перестановок t - время работы функции сортировки Сравнение идет на 3 видах массивов почти упорядоченный, плохо упорядоченный и случайный. Я... http://www.cyberforum.ru/cpp-beginners/thread210105.html
При чтении файла последний элемент повторяется дважды C++
появилась необходимость выучить работу с файлами за 9 часов #include <iostream> #include <time.h> #include <stdio.h> #include <stdlib.h> int main() {
Расчет средневзвешенной оценки C++
Написать программу для расчёта средневзвешенной оценки по предмету, средневзвешенной называетсяоценка, складывающаяся из 5 текущих оценок, но каждая из оценок имеет "вес" (коэффициент от 0 до 1). сумма коэффициенттов равна 1! Оценки и коэффициенты вводятся пользователем.
C++ Структура / системы координат http://www.cyberforum.ru/cpp-beginners/thread210094.html
Здраствуйте уважаемые знатоки! Есть задача по структурам: Надо описать структуры для декартовых (x,y) и полярных (r,pi) координат. Определить функцию для перевода из полярных в декартовы координаты. В ходе решения, на сколько я понимаю, нужны будут формулы переходов с одной системы координат в другую. Заранее спасибо! Добавлено через 3 часа 27 минут куку ? =)
C++ Завернутые векторы Нужно написать програму, которая складывает два завернутых вектора фиксированной длинны. Вообщем прграма из трех файлов, выдает ошибку Linking... main.obj : error LNK2001: unresolved external symbol "public: static unsigned int w_v::sz" (?sz@w_v@@2IA) realization.obj : error LNK2001: unresolved external symbol "public: static unsigned int w_v::sz" (?sz@w_v@@2IA) C:\Documents and... подробнее

Показать сообщение отдельно
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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