29 / 29 / 4
Регистрация: 08.06.2010
Сообщений: 146
1

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

25.07.2010, 21:36. Показов 17352. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2010, 21:36
Ответы с готовыми решениями:

Сложение элементов двух векторов с записью в третий
Есть код функции (не дописанная), которая получает в качестве аргументов 2 вектора произвольных...

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

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

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

13
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
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;
}
2
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 22:13 3
*HellRaiser*,
C++
1
x.push_back(v[i] + c[i]);
2
29 / 29 / 4
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 22:46  [ТС] 4
CyBOSSeR, огромное спасибо. Блин ну я конешно протупил тут
0
Эксперт С++
3224 / 1751 / 435
Регистрация: 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
29 / 29 / 4
Регистрация: 08.06.2010
Сообщений: 146
25.07.2010, 23:43  [ТС] 6
Охохо какой сложный код...сохраню его до лучших времён, может осилю как нибуть.
Приблизительно догадываюсь что к чему, кроме строчки
C++
1
std::locale::global(std::locale(""));
Зачем она?
0
Эксперт С++
3224 / 1751 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
25.07.2010, 23:47 7
Цитата Сообщение от *HellRaiser* Посмотреть сообщение
Охохо какой сложный код...сохраню его до лучших времён, может осилю как нибуть.
Приблизительно догадываюсь что к чему, кроме строчки
C++
1
std::locale::global(std::locale(""));
Зачем она?
Для адекватного вывода кириллицы.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 23:48 8
Mr.X, к чему такие сложности? Для чего?
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
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
Эксперт С++
3224 / 1751 / 435
Регистрация: 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;
}
2
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
18.10.2016, 22:51 11
Ага, только шо за форматирование такое...отступы по 4 пробела
0
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
18.10.2016, 22:52 12
Цитата Сообщение от nofx Посмотреть сообщение
Ага, только шо за форматирование такое...отступы по 4 пробела
Табуляция пробелами, не слышали о такой?
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
18.10.2016, 23:30 13
Цитата Сообщение от GbaLog- Посмотреть сообщение
Табуляция пробелами, не слышали о такой?
нет, дайте пруф.
0
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
19.10.2016, 10:27 14
Цитата Сообщение от nofx Посмотреть сообщение
нет, дайте пруф.
https://habrahabr.ru/post/83528/
https://habrahabr.ru/post/308974/
0
19.10.2016, 10:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2016, 10:27
Помогаю со студенческими работами здесь

Функции: умножение вектора на число и поэлементное сложение двух векторов одинакового размера
Составить функцию умножения вектора на число и функцию поэлементарного сложения двух векторов...

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru