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

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

Войти
Регистрация
Восстановить пароль
 
Виталий123
-96 / 5 / 2
Регистрация: 29.11.2011
Сообщений: 84
#1

Как сделать, чтобы класс обрабатывал по одному элементу vector - C++

15.11.2012, 23:42. Просмотров 326. Ответов 2
Метки нет (Все метки)

привет всем ! как сделать так чтобы класс обрабатывал по одному элементу vector r, g, b, состоящий из 10 элементов а то у меня получается что когда когда пишешь такой цикл
C++
1
2
3
4
5
6
7
for(int i = 0; i < 10; i++)
    {
        r.push_back((rand() % 256) );
        g.push_back((rand() % 256) );
        b.push_back((rand() % 256) );
        
    }
у меня обрабатывает класс сразу все 10 элементов vector r, g, b.
а если так записать
C++
1
2
3
4
5
6
7
8
for(int i = 0; i < 10; i++)
    {
        r.push_back((rand() % 256) );
        g.push_back((rand() % 256) );
        b.push_back((rand() % 256) );
                rgb2hsl(r, g, b);
        
    }
, то обрабатывает каждый элемент на единицу больше(т.е 1 элемент, потом 2 элемента, 3 элемента и т.д) что нужно для этого изменить в конструкторе или в клиентской области ? вот код весь код
класс
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
#pragma once
 
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
class rgb2hsl
{
public:
    rgb2hsl(vector<double>& r, vector<double>& g
        , vector<double>& b): R(r.begin(), r.end()), G(g.begin(), g.end())
        , B(b.begin(), b.end()) 
    {
        cout<<"R  ";
        copy(R.begin(), R.end(), ostream_iterator<double>(cout, " ")); cout<<endl;
        cout<<"G  ";
        copy(G.begin(), G.end(), ostream_iterator<double>(cout, " ")); cout<<endl;
        cout<<"B  ";
        copy(B.begin(), B.end(), ostream_iterator<double>(cout, " ")); cout<<endl;
    }
    vector<double>::iterator MIN(vector<double>& A, vector<double>& C)
    {
        vector<double>::iterator  j, i;
        j = min_element(A.begin(), A.end());
        i = min_element(C.begin(), C.end());
        if(*j <= *i) return j;
        else return i;
    }
    vector<double>::iterator MIN3()
    {
        vector<double>::iterator j, i;
        j = min_element(R.begin(), R.end());
        i = min_element(G.begin(), G.end());
        if(*j <= *i) return MIN(R, B);
        else return MIN(G, B);
    }
    vector<double>::iterator MAX(vector<double>& A, vector<double>& C)
    {
        vector<double>::iterator j, i;
        j = max_element(A.begin(), A.end());
        i = max_element(C.begin(), C.end());
        if(*j >= *i) return j;
        else return i;
    }
    vector<double>::iterator MAX3()
    {
        vector<double>::iterator j, i;
        j = max_element(R.begin(), R.end());
        i = max_element(G.begin(), G.end());
        if(*j >= *i) return MAX(R, B);
        else return MAX(G, B);
    }
    vector<double> resultMaxMin()
    {
        vector<double> j, i, result;
        j.push_back(*MAX3()); i.push_back(*MIN3());
        transform(j.begin(), j.end(), i.begin(), back_inserter(result), minus<double>());
        return result;
    }
    bool findR()
    {
        for(auto r1 = R.begin(); r1 != R.end(); ++r1)
            if(*r1 == *MAX3()) return true;
        return false;
    }
    bool findG()
    {
        for(auto g1 = G.begin(); g1 != G.end(); ++g1)
            if(*g1 == *MAX3()) return true;
        return false;
    }
    bool findB()
    {
        for(auto b1 = B.begin(); b1 != B.end(); ++b1)
            if(*b1 == *MAX3()) return true;
        return false;
    }
    vector<double> H()
    {
        double x(60.0), y(0.0), z(360.0), q(120.0), w(240.0);
        double* value6 = &x; double* value0 = &y; double* value3 = &z;
        double* value2 = &q; double* value24 = &w;
        vector<double> result(R.size());
        auto r1 = R.begin(); auto g1 = G.begin(); auto MaxMin = resultMaxMin()[0];
        auto b1 = B.begin(); auto rst = result.begin();
        if(*MAX3() == *MIN3())
            *rst = 0;
        else if(findR())
        {
            for(; g1 != G.end(), b1 != B.end(), rst != result.end(); ++g1, ++rst, ++b1)
            {
                if(*g1 >= *b1)
                    *rst = *value6 * ((*g1 - *b1) / MaxMin) + *value0;
                else if(*g1 < *b1)
                    *rst = *value6 * ((*g1 - *b1) / MaxMin) + *value3;
            }
        }
        else if(findG())
            for(; b1 != B.end(), r1 != R.end(), rst != result.end(); ++b1, ++rst, ++r1)
                *rst = *value6 * ((*b1 - *r1) / MaxMin) + *value2;
        else if(findB())
            for(; r1 != R.end(), g1 != G.end(), rst != result.end(); ++r1, ++rst, ++g1)
                *rst = *value6 * ((*r1 - *g1) / MaxMin) + *value24;
        return result;
    }
    vector<double> L()
    {
        double x(2.0); double* value = &x;
        double z(100.0); double* value1 = &z;
        double t(255.0); double* value25 = &t;
        vector<double> result(R.size());
        vector<double> r3(R.size()); auto re = r3.begin();
        auto rst = result.begin(); auto maxx = *MAX3();
        auto minn = *MIN3();
        for(; rst != result.end(), re != r3.end(); ++rst, ++re) 
            *rst = (((maxx + minn) / *value) * *value1) / *value25;
        return result;
    }
    vector<double> S()
    {
        double y(2.0); double* value2 = &y; double z = 100.0;
        double* value1 = &z; double u = 0.5; double* value12 = &u;
        vector<double> result(R.size()); auto rst = result.begin();
        vector<double> rr(R.size()); auto rr1 = rr.begin();
        auto l = L(); auto ll = l.begin(); auto MaxMin = resultMaxMin()[0];
        auto maxx = *MAX3(); auto minn = *MIN3();
        for(; rst != result.end(), ll != l.end(); ++rst, ++ll)
        {
            
            if(*ll <= *value12)
                *rst = (MaxMin / (maxx + minn)) * *value1;
            else
                *rst = (MaxMin / (*value2 - maxx - minn)) * *value1;
        }
        return result;
    }
private:
    vector<double> R; vector<double> G; vector<double> B;
};
клиентская область


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
#include "stdafx.h"
#include "rgb2hsl.h"
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <conio.h>
 
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<double> r, g, b;
    for(int i = 0; i < 10; i++)
    {
        r.push_back((rand() % 256) );
        g.push_back((rand() % 256) );
        b.push_back((rand() % 256) );
        
    }
    rgb2hsl rgb(r, g, b);
    cout<<"Min "<<*rgb.MIN3()<<endl;
    cout<<"Max "<<*rgb.MAX3()<<endl;
    cout<<"resultMaxMin "<<rgb.resultMaxMin()[0]<<endl;
    auto hh = rgb.H(); auto ll = rgb.L(); auto ss = rgb.S();
    //////////////////////////////////////////////////////////////////////////
    cout<<endl;
    copy(hh.begin(), hh.end(), ostream_iterator<double>(cout, " ")); cout<<endl<<endl;
    copy(ss.begin(), ss.end(), ostream_iterator<double>(cout, " ")); cout<<endl<<endl;
    copy(ll.begin(), ll.end(), ostream_iterator<double>(cout, " ")); cout<<endl<<endl;
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2012, 23:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать, чтобы класс обрабатывал по одному элементу vector (C++):

Как сделать переход к следующему элементу в STL vector - C++
Есть пример с книги по STL, и я его решил модернизировать: 1) Дописать код который выводит количество элементов. Это я сделал 2-я...

Как сделать чтобы класс возвращал значение своего поля? - C++
Возможно я не верно выразился, есть класс: class Monstr { String name; int ammo; }; как сделать чтобы при: Monstr...

Как сделать чтобы из первого класса вычитал второй и третий класс? - C++
Как сделать чтобы из первого класса вычитал второй и третий класс? #include &lt;iostream&gt; using namespace std; class shaiba { ...

STL обращение к элементу vector - C++
Помогите исправить ошибку. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class otschet { public: double...

Обращение к предпоследнему элементу vector - C++
Имееться vector заполненный числами. Мне надо вычислить разность между последним и предпоследним элемнтом vector. Для обращения к...

Сортировка по одному из полей std::vector - C++
Подскажите пожалуйста! Задача: Имеется класс Person с полями: Family, Name, BirthDay, Sex, ExperienceTime (Фамилия, имя, дата...

2
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.11.2012, 00:23 #2
Виталий123, ну и передавайте в конструктор один элемент, а не вектор из 10 элементов
1
Виталий123
-96 / 5 / 2
Регистрация: 29.11.2011
Сообщений: 84
16.11.2012, 00:54  [ТС] #3
I.M., да уже нашел как решить проблему...ну все равно благодарю за предоставленную помощь...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 00:54
Привет! Вот еще темы с ответами:

vector<int>* v; обращение к конкретному элементу - C++
vector&lt;int&gt; *v; v = new vector&lt;int&gt;(); v-&gt;push_back(6); v-&gt;push_back(6); v-&gt;push_back(6); v-&gt;push_back(6); v-&gt;push_back(6); ...

Как правильно описать функцию чтобы возвращала двумерный vector - C++
Как правильно написать чтобы результат передался в vec1? #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; const int...

Как вывести на екран структуру/класс через vector или list - C++
Всем привет.Подскажите как через итераторы правильно вывести структуру или класс в поток. Как я понял для стандартных типов они выводятся...

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


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

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

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