Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Использование vector insert и своего типа данных - C++

04.09.2013, 23:12. Просмотров 791. Ответов 1
Метки нет (Все метки)

Не понимаю почему вот здесь выскакивает странная ошибка:
C++
1
arr.insert(arr.begin(),(*max));
Использование vector insert и своего типа данных
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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <numeric>
#include <Windows.h>
 
using namespace std;
 
template<typename T>
class Variable
{
    friend ostream& operator<<(ostream& out, const Variable& v)
    {
        out << v.value;
        return out;
    }
public:
    Variable<T>& operator=(Variable<T> v)
    {
        value = v.value;
        return *this;
    }
    Variable()
    {
        value = NULL;
    }
    Variable(T _value) : value(_value)
    {}
    T getValue(){return value;}
    void setValue(T _value){
        value = _value;
    }
    bool operator<(Variable<T> v)
    {
        return value < v.value;
    }
    bool operator>(Variable<T> v)
    {
        return value > v.value;
    }
    
 
    T value;
};
 
 
template<typename T,template<typename T,
    typename Allocator = allocator<T> > class Container = vector>
class Sum{
public:
    
    Sum(Container<T> colection)
    {
        count = colection.size();
        sum = 0;
        for(int i = 0; i < count; i++)
            sum += colection[i].getValue();
        
        //sum = accumulate(colection.begin(),colection.end(),0);
    }
    void operator()(Variable<int>& elem)
    {
        elem.value += getSum();
    }
    double getSum()
    {
        if(!sum)
            return 0;
        return static_cast<double>(sum) / static_cast<double>(count);
    }
private:
    int count;
    double sum;
};
 
int main()
{
    vector<Variable<int> > arr;
    
    for(int i = 0; i < 10; i++)
        arr.push_back(Variable<int>(rand()%10));
    cout<<"You array: ";
    copy(arr.begin(),arr.end(),ostream_iterator<Variable<int> >(cout," "));
    cout << endl;
 
    vector<Variable<int> >::iterator max = max_element(arr.begin(),arr.end());
    cout<<"Max element: "<<*max<<endl;
    vector<Variable<int> >::iterator min = min_element(arr.begin(),arr.end());
    cout<<"Min element: "<<*min<<endl;
    arr.erase(min);
    arr.insert(arr.begin(),(*max));
 
    copy(arr.begin(),arr.end(),ostream_iterator<Variable<int> >(cout," "));
    Sum<Variable<int>,vector> sum(arr);
    for_each(arr.begin(),arr.end(),sum); //<-------
    cout<<endl<<"Sum: "<<sum.getSum();
    cout<<endl;
    cout<<"Array after replacing: ";
    copy(arr.begin(),arr.end(),ostream_iterator<Variable<int> >(cout," "));
 
    cin.get();
    cin.get();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 23:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование vector insert и своего типа данных (C++):

Как вывести vector своего типа? - C++
Суть вот в чем, допустим нужно создать класс Name_value, который хранит строку и число, занести все это дело в вектор так, чтоб получился...

sort для своего типа данных - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; class foo { public: foo() : v(0)...

Использование своего объекта своего класса внутри другого - C++
Здравствуйте. Есть класс для работы с матрицами. Все работает. Теперь нужно создать другой класс, где полями будут являться переменные -...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? - C++
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Vector.insert ругается на размер - C++
#include &lt;QCoreApplication&gt; #include &lt;list&gt; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; void vivod(vector&lt;int&gt;...

Использование файлового типа данных - C++
Всем прив:) Дан файл F1, который содержит номера телефонов сотрудников учреждения: указываеться фамилия сотрудника, его инициалы и...

1
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.09.2013, 00:30 #2
итератор max становится невалидным после модификации вектора в строке 91:
arr.erase(min);
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2013, 00:30
Привет! Вот еще темы с ответами:

Не удаётся создать безымянный объект типа vector моего типа - C++
Собсно #include &lt;vector&gt; using namespace std; //Вот мой австорский тип struct kletka { int i, j; kletka(int x, int...

Нужна реализация функции std::vector::insert() - C++
Нужна реализация функции std::vector::insert() 1)iterator insert (iterator position, const value_type&amp; val); 2) void insert (iterator...

Создать шаблонную очередь и инстанцировать её для своего класса, представляющего строку на базе vector<char> - C++
Была задача создать шаблонную очередь (я это сделал) и инстанцировать её для своего класса, представляющего строку, изготовленную из...

Использование vector - C++
Здравствуйте. У меня есть два класса,в каждом находится по вектору vector&lt;AbstractObject*&gt;m_BulletVector; ...


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

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

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