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

Сложение двух векторов и запись результата в третий вектор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.81
*HellRaiser*
 Аватар для *HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 21:36     Сложение двух векторов и запись результата в третий вектор #1
Программа заполняет 2 вектора типа float значениями. После чего вектора складываются и результат сложения записывается в третий вектор. Вот мой код
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
#include <iostream>
#include <vector>
 
int main()
{
    float q=0, summ [5];
    std::vector<float> v;
    std::vector<float> c;
    std::vector<float> x;
    for (int i=0; i<5; ++i){
    std::cout<<"Vvedite v["<<i<<"] ";
    std::cin>>q;
    v.push_back(q);
    }
    //for (int i=0; i<v.size(); ++i)
    //std::cout<<v[i]<<std::endl;
    std::cout<<std::endl;
    for (int i=0; i<5; ++i){
    std::cout<<"Vvedite c["<<i<<"] ";
    std::cin>>q;
    c.push_back(q);
    }
    //for (int i=0; i<c.size(); ++i)
    //std::cout<<c[i]<<std::endl;
    std::cout<<std::endl;
    for (int i=0; i<5; ++i){
        summ[i]=v[i]+c[i];
        x.push_back(summ[i]);
    }
    for (int i=0; i<x.size(); ++i)
    std::cout<<x[i]<<std::endl;
    std::cin.get();
    return 0;
}
Вопрос в том что используется промежуточный массив в котором я сохраняю результат сложения. Можно ли выполнить сложение и сразу записывать в 3 вектор. У меня такой код например вызывал ошибку памяти
C++
1
2
3
for (int i=0; i<5; ++i){
        x[i]=v[i]+c[i];
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2010, 21:36     Сложение двух векторов и запись результата в третий вектор
Посмотрите здесь:

Чтение из двух файлов и запись в третий C++
C++ Сложение векторов
Сложение элементов двух векторов с записью в третий C++
C++ Построить третий вектор на основе двух по правилу
Слияние двух векторов в третий по условию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.07.2010, 22:13     Сложение двух векторов и запись результата в третий вектор #2
Вот мой вариант, посмотрите:

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
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
 
void show (const std::vector <float> &);
 
int main (void)
{
    const int SIZE=5;
    std::vector <float> A;
    std::vector <float> B;
    std::vector <float> REZULT (SIZE);
 
    float tmp;
    // fill vector A
    for (int i=0; i<SIZE; i++) {
        std::cout << "A[" << i <<"]: ";
        std::cin >> tmp;
        A.push_back (tmp); }
    // fill vector B
    for (int i=0; i<SIZE; i++) {
        std::cout << "B[" << i <<"]: ";
        std::cin >> tmp;
        B.push_back (tmp); }
    // 
    std::vector <float> :: iterator A_=A.begin();
    std::vector <float> :: iterator B_=B.begin();
    std::vector <float> :: iterator REZULT_=REZULT.begin();
 
    for (REZULT_; REZULT_!=REZULT.end(); REZULT_++, A_++, B_++)
        *(REZULT_)=*(A_) + *(B_);
    // output
    std::cout << "Vector A: ";
    show (A);
    std::cout << "Vector B: ";
    show (B);
    std::cout << "Vector REZULT: ";
    show (REZULT);
 
    system ("pause");
    return 0;
}
 
void show (const std::vector <float> &vec)
{
    std::copy (vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 22:13     Сложение двух векторов и запись результата в третий вектор #3
*HellRaiser*,
C++
1
x.push_back(v[i] + c[i]);
*HellRaiser*
 Аватар для *HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 22:46  [ТС]     Сложение двух векторов и запись результата в третий вектор #4
CyBOSSeR, огромное спасибо. Блин ну я конешно протупил тут
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
25.07.2010, 23:05     Сложение двух векторов и запись результата в третий вектор #5
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
/////////////////////////////////////////////////////////////////////////
//  Сложение векторов.
/////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
/////////////////////////////////////////////////////////////////////////
typedef float                      T_float_elem;
typedef std::vector<T_float_elem>  T_float_nums;
typedef std::string                T_str;
/////////////////////////////////////////////////////////////////////////
T_float_nums  input_float_nums(const T_str&  vect_name, int vect_size)
{
    struct T_input_num
    {
        T_str  name_;
        int    count_;
        //---------------------------------------------------------------
        T_input_num(T_str  name) : name_(name), count_(0)
        {};
        //---------------------------------------------------------------
        void operator() (T_float_elem&  elem)
        {
            std::cout << name_
                      << '['
                      << ++count_
                      << ']'
                      << " = ";
            std::cin >> elem;        
        }
    };
    T_float_nums  float_nums(vect_size);
    std::for_each(float_nums.begin(), float_nums.end(), T_input_num(vect_name));
    return  float_nums;
}
/////////////////////////////////////////////////////////////////////////
T_float_nums  operator+ (const T_float_nums& v1, const T_float_nums& v2)
{ 
    int  min_size = std::min(v1.size(), v2.size());
    T_float_nums  v_res(min_size);
    std::transform(v1.begin(), v1.begin() + min_size, 
                   v2.begin(), v_res.begin(), std::plus<T_float_elem>());
    return v_res;
}
/////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите размерность векторов: ";
    int vect_size;
    std::cin >> vect_size;
    T_float_nums  V1 = input_float_nums("V1", vect_size);
    std::cout << std::endl;
    T_float_nums  V2 = input_float_nums("V2", vect_size);
    T_float_nums  V_sum = V1 + V2;
    std::cout << std::endl
              << "Сумма векторов: "
              << std::endl;
    std::copy(V_sum.begin(), V_sum.end(), 
              std::ostream_iterator<T_float_elem>(std::cout, "\n"));
    std::cout << std::endl;
    return 0;
}
*HellRaiser*
 Аватар для *HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 23:43  [ТС]     Сложение двух векторов и запись результата в третий вектор #6
Охохо какой сложный код...сохраню его до лучших времён, может осилю как нибуть.
Приблизительно догадываюсь что к чему, кроме строчки
C++
1
std::locale::global(std::locale(""));
Зачем она?
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
25.07.2010, 23:47     Сложение двух векторов и запись результата в третий вектор #7
Цитата Сообщение от *HellRaiser* Посмотреть сообщение
Охохо какой сложный код...сохраню его до лучших времён, может осилю как нибуть.
Приблизительно догадываюсь что к чему, кроме строчки
C++
1
std::locale::global(std::locale(""));
Зачем она?
Для адекватного вывода кириллицы.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 23:48     Сложение двух векторов и запись результата в третий вектор #8
Mr.X, к чему такие сложности? Для чего?
nofx
7 / 7 / 1
Регистрация: 28.10.2012
Сообщений: 85
Завершенные тесты: 1
17.10.2016, 23:06     Сложение двух векторов и запись результата в третий вектор #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<class T> 
vector<T> sumvectors(vector<T>& v1, vector<T>& v2)
{
    int min_size = std::min(v1.size(), v2.size());
    int max_size = std::max(v1.size(), v2.size());
    
    vector<T> res(min_size);
        
    std::transform(v1.begin(), v1.begin() + min_size, v2.begin(), res.begin(), std::plus<T>());
 
    //дополняем результирующий вектор оставшимися значениями после elem + min_size
    for (int i = 0; (v1.begin() + min_size + i) != v1.end(); i++)
        res.push_back(*(v1.begin() + min_size + i));
    
    for (int i = 0; (v2.begin() + min_size + i) != v2.end(); i++)
        res.push_back(*(v2.begin() + min_size + i));
 
    return res;
 
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
18.10.2016, 14:09     Сложение двух векторов и запись результата в третий вектор #10
nofx, можно проще:
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
#include <iostream>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::vector     < int   >   T_int_values;
///////////////////////////////////////////////////////////////////////////////
template < typename TT_cont >
TT_cont     cont_sum
    (
        TT_cont     const   &   A,
        TT_cont     const   &   B
    )
{
    auto    A_is_greater    (
                                A.size()    >=  B.size()
                            );
 
    TT_cont     res     =   A_is_greater
                                ?   A
                                :   B;
 
    auto    res_elem_it     =   res.begin();
 
    for (
            auto    elem    :   A_is_greater
                                    ?   B
                                    :   A
        )
    {
        (*res_elem_it++)    +=  elem;
    }
 
    return res;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    auto    v   =   cont_sum    (
                                    T_int_values{ 10,   10          },
                                    T_int_values{ 1,    1,  1,  1   }
                                );
 
    for( auto   elem    :   v )
    {
        std::cout   <<  elem    <<  '\t';
    }
 
    std::cout   <<  std::endl;
}
nofx
7 / 7 / 1
Регистрация: 28.10.2012
Сообщений: 85
Завершенные тесты: 1
18.10.2016, 22:51     Сложение двух векторов и запись результата в третий вектор #11
Ага, только шо за форматирование такое...отступы по 4 пробела
GbaLog-
Не Эксперт C++
1477 / 622 / 176
Регистрация: 24.08.2014
Сообщений: 2,531
Записей в блоге: 1
Завершенные тесты: 2
18.10.2016, 22:52     Сложение двух векторов и запись результата в третий вектор #12
Цитата Сообщение от nofx Посмотреть сообщение
Ага, только шо за форматирование такое...отступы по 4 пробела
Табуляция пробелами, не слышали о такой?
nofx
7 / 7 / 1
Регистрация: 28.10.2012
Сообщений: 85
Завершенные тесты: 1
18.10.2016, 23:30     Сложение двух векторов и запись результата в третий вектор #13
Цитата Сообщение от GbaLog- Посмотреть сообщение
Табуляция пробелами, не слышали о такой?
нет, дайте пруф.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2016, 10:27     Сложение двух векторов и запись результата в третий вектор
Еще ссылки по теме:

Построить вектор из общих элементов двух векторов C++
C++ Удаление из одного массива элементов второго массива и запись результата в третий
Сложение векторов C++

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

Или воспользуйтесь поиском по форуму:
GbaLog-
Не Эксперт C++
1477 / 622 / 176
Регистрация: 24.08.2014
Сообщений: 2,531
Записей в блоге: 1
Завершенные тесты: 2
19.10.2016, 10:27     Сложение двух векторов и запись результата в третий вектор #14
Цитата Сообщение от nofx Посмотреть сообщение
нет, дайте пруф.
https://habrahabr.ru/post/83528/
https://habrahabr.ru/post/308974/
Yandex
Объявления
19.10.2016, 10:27     Сложение двух векторов и запись результата в третий вектор
Ответ Создать тему
Опции темы

Текущее время: 22:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru