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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.81
*HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
#1

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

25.07.2010, 21:36. Просмотров 5643. Ответов 13
Метки нет (Все метки)

Программа заполняет 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];
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2010, 21:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение двух векторов и запись результата в третий вектор (C++):

Сложение элементов двух векторов с записью в третий - C++
Есть код функции (не дописанная), которая получает в качестве аргументов 2 вектора произвольных типов: template&lt;class T&gt; T&amp;...

Слияние двух векторов в третий по условию - C++
Здравствуйте, подскажите пожалуйста как написать сравнение двух массивов (массив старых и массив новых значений) с записью в третий...

Построить третий вектор на основе двух по правилу - C++
Написать программу, которая для двух заданных векторов X и Y одинаковой длиной n сформирует и выведет на экран вектор R той же...

Построить вектор из общих элементов двух векторов - C++
Помогите с написание программы, нет идей вообще :( Задано два вектора действительных чисел х и у, каждый из которых имеет n элементов....

Чтение из двух файлов и запись в третий - C++
Имеется следующая задача: в цикле подсчитывается определенное значение функции fe, зависящее от одного параметра(вводится) и записывается в...

Удаление из одного массива элементов второго массива и запись результата в третий - C++
Есть массив masA (длина lenA), есть массив masB (длина lenB). Необходимо из массива masA удалить элементы, входящие в массив masB и...

13
neske
1508 / 875 / 84
Регистрация: 26.03.2010
Сообщений: 2,988
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;
}
1
CyBOSSeR
Эксперт С++
2307 / 1677 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 22:13 #3
*HellRaiser*,
C++
1
x.push_back(v[i] + c[i]);
1
*HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 22:46  [ТС] #4
CyBOSSeR, огромное спасибо. Блин ну я конешно протупил тут
0
Mr.X
Эксперт С++
3054 / 1699 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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;
}
2
*HellRaiser*
28 / 28 / 2
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 23:43  [ТС] #6
Охохо какой сложный код...сохраню его до лучших времён, может осилю как нибуть.
Приблизительно догадываюсь что к чему, кроме строчки
C++
1
std::locale::global(std::locale(""));
Зачем она?
0
Mr.X
Эксперт С++
3054 / 1699 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
25.07.2010, 23:47 #7
Цитата Сообщение от *HellRaiser* Посмотреть сообщение
Охохо какой сложный код...сохраню его до лучших времён, может осилю как нибуть.
Приблизительно догадываюсь что к чему, кроме строчки
C++
1
std::locale::global(std::locale(""));
Зачем она?
Для адекватного вывода кириллицы.
0
CyBOSSeR
Эксперт С++
2307 / 1677 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 23:48 #8
Mr.X, к чему такие сложности? Для чего?
0
nofx
7 / 7 / 1
Регистрация: 28.10.2012
Сообщений: 118
Завершенные тесты: 2
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;
 
}
0
Mr.X
Эксперт С++
3054 / 1699 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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;
}
0
nofx
7 / 7 / 1
Регистрация: 28.10.2012
Сообщений: 118
Завершенные тесты: 2
18.10.2016, 22:51 #11
Ага, только шо за форматирование такое...отступы по 4 пробела
0
GbaLog-
Любитель чаепитий
3093 / 1432 / 346
Регистрация: 24.08.2014
Сообщений: 5,078
Записей в блоге: 1
Завершенные тесты: 2
18.10.2016, 22:52 #12
Цитата Сообщение от nofx Посмотреть сообщение
Ага, только шо за форматирование такое...отступы по 4 пробела
Табуляция пробелами, не слышали о такой?
0
nofx
7 / 7 / 1
Регистрация: 28.10.2012
Сообщений: 118
Завершенные тесты: 2
18.10.2016, 23:30 #13
Цитата Сообщение от GbaLog- Посмотреть сообщение
Табуляция пробелами, не слышали о такой?
нет, дайте пруф.
0
GbaLog-
Любитель чаепитий
3093 / 1432 / 346
Регистрация: 24.08.2014
Сообщений: 5,078
Записей в блоге: 1
Завершенные тесты: 2
19.10.2016, 10:27 #14
Цитата Сообщение от nofx Посмотреть сообщение
нет, дайте пруф.
https://habrahabr.ru/post/83528/
https://habrahabr.ru/post/308974/
0
19.10.2016, 10:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2016, 10:27
Привет! Вот еще темы с ответами:

Сортировка двух векторов, создание третьего и запись в файл - C++
Необходимо отсортировать два вектора int таким образом чтобы сохранить результат в третий вектор, выбрав только те числа которые...

Сложение векторов - C++
Здрасти. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; class vector3D{ public: vector3D(int inita=0,...

Сложение векторов - C++
Не понимаю почему методом insert не хочет принимать такие параметры. Даже если пытают переменной типа int присвоить vec, выдает ошибку (int...

Сложение векторов строк - C++
Имеются два вектора строк std::vector &lt;std::string&gt; *str1; std::vector &lt;std::string&gt; *str2; Как их сложить чтоб в итоге...


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

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

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