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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевод Turdo Delphi в C++ http://www.cyberforum.ru/cpp-beginners/thread699065.html
Нужно перевести программу, написанную на языке Turdo Delphi в C++. Вот сам код: program PT1; {$Apptype Console} uses SysUtils; Var N:Byte; s:integer; Procedure Noir(N:Byte; x,y,z:char); Begin if N>0 then
C++ Функция, возвращающая число, полученное из целого числа Выдали задание, но я не могу разобратся в логической цепочки . Не могу понять как написать ее правильно.Кто может напишите=)) Задание::Написать функцию, которая возвращает число, полученное из целого числа x, в котором n разрядов, начиная с позиции p, заменены на n правых разрядов числа y, а остальные разрядов оставлены без изменений (крайний правый бит считать нулевым по номеру).... http://www.cyberforum.ru/cpp-beginners/thread699062.html
C++ книга с++
Здравствуйте, наверное уже избитая тема, но все таки нужно выбрать книгу по с++. Сейчас в институте изучаю Алгоритмы программирования на с++ (уже 2 месяц то есть основы какие-то есть)/ Проблема в том что каждую неделю мы сдаем новую лабораторную каждый раз на новую тему (темы последних лаб: структуры - работа с файлами - реализация стеков (магазинный и кольцевой) и очередь - прохождения...
C++ Запись данных в текстовый файл
Помогите решить задачу. Нужно создать что-то типа базы данных с записью в текстовый документ. Нужно вводить из клавиатуры марку машины и год изготовления. После чего эта информация записывается в текстовый файл в таком виде: № записи(инкремент) / Марка машины / Год изготовления / Дата записи в файл. Информация должна дописываться в файл, а не переписывать его при повторном запуске программы. Вот...
C++ Заполнение структуры http://www.cyberforum.ru/cpp-beginners/thread699021.html
Вот есть такая программа, как мне сделать чтобы я не вводил данные каждый раз, а программа сама заполняла все поля? #include <iostream.h> #include <string> using namespace std; struct timetable{ char nazv; int numb;
C++ try vs return в обработке ошибок Скажите пожалуйста, как лучше обрабатывать ошибку: return ... или throw ... ? Если функция типа void Добавлено через 13 минут вверх подробнее

Показать сообщение отдельно
Виталий123
-96 / 5 / 2
Регистрация: 29.11.2011
Сообщений: 84

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

15.11.2012, 23:42. Просмотров 308. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru