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

конкатенация и поэлементное сложение векторов (контейнеров) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
punkusha
Сообщений: n/a
11.09.2011, 18:46     конкатенация и поэлементное сложение векторов (контейнеров) #1
Необходимо создать класс для работы с одномерными векторами, где необходимо реализовать:
-функции ввода и вывода на экран вектора
-сложение векторов с помощью перегруженного оператора +
(чтобы можно было просто написать с=a+b ),
если вектора разной размерности, то выполнить их слияние
-конструктор по умолчанию
-конструктор, у которого параметр - количество элементов в векторе

..остальное по необходимости=)
Очень необходима ваша помощь. Помогите!) Мне осталось 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
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
 
using namespace std;
 
class CArr
{ private:  // создадим чуть позже дружественный оператор сложения, чтобы иметь доступ к приват
  vector <int> arr(int size=0);
  int size;
  public:
  CArr ();               //Конструктор по умолч.
  explicit CArr(int);  //позволяет задавать размерность, но не конструктор преобразования
  CArr (const CArr& ); //конструктор копирования
  ~CArr; //деструктор
     
   void input() 
     {  // не знаю как сделать.. пока оставила 
         cout<<"Enter number."<<endl<< "Press ENTER to continue, for exit - ESC+ENTER: "<<endl;
         char value=NULL;
         do
       { 
     int x;
     cin>>x;
         cin>>value;
         arr.push_back(x);
       }  while((int) value!=27);
     }  
 
     void print()
     { copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, " | "));}
  
 
     CArr const friend operator+ (CArr const& vector2) //перегружаем оператор +
     {    
        CArr temp(*this);             //cоздание временного объекта и инициализация его текущим
    сopy (arr.begin(), arr.end(), back_inserter(temp.arr));
    copy (vector2.begin(), vector2.end(), back_inserter(temp.arr));//back_inserter позволяет вставлять элементы в конец вектора, переданного ему в качестве аргумента
    
         return temp;
      }
 
};
    
CArr::CArr(const CArr& v)
{                                   //  Конструктор копирования
    size = v.size;
    vect (size);
    for(int i = 0; i < size; i++)
        vect[i] = v.vect[i];
}
 
int main()
{
  CArr vec1, vec2, vec;
    
  vec1.input();
  vec2.input();
  
  cout<<endl<<endl;
       
  vec=vec1+vec2;
 
  cout<<"Result :"<<endl;
  vec.print();
  cout<<endl;
  system("pause");
 
  return 0;
}
не судите строго - вторая неделя пошла, как изучаю С++
знаю, несвязно и бредово вышло.. но я просто не знаю как должно быть. все кусочки, а полную прогу написать так и не могу - спасите!)
хотя бы словами опишите, что надо сделать)

а вот просто сложение массивов: (мб скажите как это решение под данную задачу переделать)
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
#include "class.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251); SetConsoleCP(1251);
    int End=' ';
    do
    {
    system("cls");
    short n1,n2;
    bool ok1=false,ok2=false;
    do
    {
    Cin("Размер первого массива:",n1);
    if(n1<1) cout<<"\nРазмер должен быть больше нуля!";
    }while(n1<1);
    Mas mas1(n1);
    cout<<"Введите элементы первого массива:\n";
    mas1.init();
    do
    {
    Cin("\nРазмер второго массива:",n2);
    if(n2<1) cout<<"\nРазмер должен быть больше нуля!";
    }while(n2<1);
    Mas mas2(n2);
    cout<<"Введите элементы второго массива:\n";
    mas2.init();
    Mas mas3(n1+n2);
    ok1=mas3.mascat(mas1,mas2);
    Mas mas4(n1);
    ok2=mas4.massum(mas1,mas2);
    cout<<"\nПервый массив:\n";
    mas1.print();
    cout<<"\nВторой массив:\n";
    mas2.print();
    if(ok1)
    {
        cout<<"\nОбъединенные массивы:\n";
        mas3.print();
    }
    else cout<<"\nНевозможно объединить массивы\n";
    if(ok2)
    {
        cout<<"\nСуммированные массивы:\n";
        mas4.print();
    }
    else cout<<"\nНевозможно просуммировать массивы\n";
    cout<<"\nДля повтора нажмите пробел. Выход - любая другая клавиша";
    End=_getch();
    }while(End==' ');
}
 
class.h:
 
#pragma once
 
class Mas
{
    double *mas;
    unsigned short n;
public:
    Mas(int N);
    Mas(Mas&);
    ~Mas();
    bool init();
    bool print();
    bool mascat(Mas,Mas);
    bool massum(Mas,Mas);
};
class.cpp:
 
#include "class.h"
#include <iostream>
 
using namespace std;
 
Mas::Mas(int N)
{
    n=N;
    mas=new double[n];
}
Mas::Mas(Mas &obj)
{
    n=obj.n;
    mas=new double[n];
    for(int i=0;i<n;i++)
        mas[i]=obj.mas[i];
}
Mas::~Mas()
{
    delete[] mas;
}
 
bool Mas::init()
{
    if(n==0) return false;
    for (int i=0;i<n;i++)
        cout<<"Vvedite element mas["<<i<<"]:"
        cin>>mas[i];
    return true;
}
 
bool Mas::print()
{
    if(n==0) return false;
    for( int i=0;i<n;i++)
        cout<<mas[i]<<'\t';
    return true;
}
 
bool Mas::mascat(Mas obj1,Mas obj2)
{
    int i,j;
    if(n==0) return false;
    if(obj1.n+obj2.n>n) return false;
    for(i=0,j=0;j<obj1.n;j++,i++)
        mas[i]=obj1.mas[j];
    for(j=0;j<obj2.n;j++,i++)
        mas[i]=obj2.mas[j];
    return true;
}
 
bool Mas::massum(Mas obj1, Mas obj2)
{
    if (obj1.n!=obj2.n || obj1.n!=n) return false;
    for (int i=0;i<n;i++)
          mas[i]=obj1.mas[i]+obj2.mas[i];
    return true;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 18:46     конкатенация и поэлементное сложение векторов (контейнеров)
Посмотрите здесь:

сложение и вычитание векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора C++
C++ сложение векторов
Сложение векторов C++
C++ Сложение векторов в структуре
C++ CUDA C/C++ сложение векторов
C++ Поэлементное сложение массивов
Сложение элементов двух векторов с записью в третий C++
C++ Конкатенация векторов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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