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

Метод слияния двух массивов - C++

Восстановить пароль Регистрация
 
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
19.01.2013, 17:32     Метод слияния двух массивов #1
Нужно разработать метод слияния двух массивов в третий (сортировка не важна)
Как я вижу реализацию: задаём и заполняем первые два массива (array x(5), array y(5)), создаём третий - пустой массив и в него по циклу загоняем по очереди элементы первых двух. Потом выводим третий массив на экран.
Собственно, после создания двух массивов я застрял((
HELP!

Имеется:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class array
{   int tmp;
public:
        array();
        array(int number);
        ~array();
        void print();
private:
        int *arr;
        int number; // размер массива
};
array::array(int Number)      // Метод заполнения массива 
{
   if( Number > 0 ) 
   number = Number;
   else throw -1;
   arr = new int[number]; 
   for (int i=0; i<number; i++)
   cin >> arr[i];
}
Как я пытался реализовать метод:
C++
1
2
3
4
5
6
7
8
9
10
void array::soed(const array &array2)
{   int *result=new int[number + number];
    int index=0;
    for (int i=0; i<number; i++)
    {result[index]=arr[i];}
    for (int i=0; i<number; i++)
        {result[index]=array2.arr[i];}
    for (int i=0; i<number*2; i++)
        cout << result[index] << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 17:32     Метод слияния двух массивов
Посмотрите здесь:

C++ метод создания двух массивов, для дальнейшего умножения их между собой
C++ Получить упорядоченный массив путем слияния двух введенных и вывести его
C++ Из двух упорядоченных массивов получить путем слияния упорядоченный массив C
C++ Надо создать массив путем слияния двух произвольных одномерных массивов
Надо создать массив путем слияния двух произвольных одномерных массивов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
19.01.2013, 17:38     Метод слияния двух массивов #2
а где
Цитата Сообщение от skiff. Посмотреть сообщение
index
увиличивается?
skiff.
6 / 6 / 2
Регистрация: 10.09.2011
Сообщений: 87
20.01.2013, 14:59  [ТС]     Метод слияния двух массивов #3
Цитата Сообщение от UserAK Посмотреть сообщение
а где увеличивается?
А в принципе метод правилен? Ничё, что в нём же и задается новый массив? И как вызвать этот метод в main'e?
Ну не знаю даже:
C++
1
2
3
4
5
6
7
8
9
10
11
void array::soed(const array &array2)
{   int *result=new int[number + number];
    int index=0;
    for (int index=0; index<number*2; ++index){
    for (int i=0; i<number; i++)
    {result[index]=arr[i];}
    for (int i=0; i<number; i++)
    {result[index]=array2.arr[i];}}
    for (int i=0; i<number*2; i++)
        cout << result[index] << endl;
}
Добавлено через 20 часов 33 минуты
Апп
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
20.01.2013, 16:12     Метод слияния двух массивов #4
Цитата Сообщение от skiff. Посмотреть сообщение
Нужно разработать метод слияния двух массивов в третий (сортировка не важна)
Как я вижу реализацию: задаём и заполняем первые два массива (array x(5), array y(5)), создаём третий - пустой массив и в него по циклу загоняем по очереди элементы первых двух. Потом выводим третий массив на экран.
Собственно, после создания двух массивов я застрял((
HELP!
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 "stdafx.h"
#include <iostream>
using namespace std;
 
void main(int argc, char ** argv){
 
    const int S = 5;
 
    double arr1[S], arr2[S], arr3[S * 2];
 
    cout << " * arr1 *" << endl << endl;
 
    for(int i = 0; i < S; i++){
            cout << "arr1[" << i << "] = ";
            cin >> arr1[i];
    }
 
    cout << endl << " * arr2 *" << endl << endl;
    for(int i = 0; i < S; i++){
            cout << "arr2[" << i << "] = ";
            cin >> arr2[i];
    }
        
    //Сливаем массивы в один
    for(int i = 0; i < S; i++){
    
        arr3[i] = arr1[i];
        
        arr3[(S * 2) - (i + 1)] = arr2[i];
 
    }
 
 
    //Вывод массива на экран
    cout << endl << " * Result *" << endl << endl;
    cout << "[";
 
 
    for(int i = 0; i < (S * 2); i++){
        
        if(i == (S * 2 - 1))
            cout << arr3[i] << "]";
        else
            cout << arr3[i] << ", ";
    }
    
    getchar();
    
    getchar();
}
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
21.01.2013, 10:01     Метод слияния двух массивов #5
у меня получилось так:

ArrayOfInt.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
#include <iostream>
 
class ArrayOfInt
{
private:
    int *values; // указатель на начало массива данных в памяти
    unsigned size; // размер массива не может быть отрицательным, поэтому лучше использовать unsigned
public:
    ArrayOfInt() : values(NULL), size(0) {} //конструктор по умолчанию - создаётся пустой массив
    ArrayOfInt(const unsigned &); /*конструктор с параметром (размер массива)
                                    если размер массива 0, то будет создан пустой массив
                                    надо следить за тем, что бы соблюдалось правило
                                    если размер size = 0 то указатель на данные values должен быть NULL*/
    ~ArrayOfInt(); //деструктор
    void Add(const ArrayOfInt &); //присоединяет данные из другого массива
    void ConsoleIn(); //ввод с консоли
    void ConsoleOut(); //вывод на консоль
};
ArrayOfInt.cpp
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 "ArrayOfInt.h"
 
ArrayOfInt::ArrayOfInt(const unsigned &_size)
    : values(NULL), size(0) // тут инициализация - массив пустой
{
    if( _size != 0 ){
        size = _size;
        values = new int[size];
    }
}
 
ArrayOfInt::~ArrayOfInt(void)
{
    //если указатель на данные values равен NULL,
    //значит данных нет и ничего удалять не надо.
    //а если есть данные, надо их удалить
    if ( values != NULL ) delete[] values;
}
 
void ArrayOfInt::Add(const ArrayOfInt &other)
{
    // если присоединяется пустой массив, то делать ничего не нужно да и нельзя
    if( other.size > 0 ){
        int *buffer = new int[size + other.size];
        memcpy(buffer, values, sizeof(int)*size);
        memcpy(buffer+size, other.values, sizeof(int)*other.size);
        delete[] values;
        values = buffer;
        size += other.size;
    }
}
 
void ArrayOfInt::ConsoleIn()
{
    if( size > 0 ){
        std::cout<<"Input Array "<<size<<" of int : ";
        for(unsigned i=0; i<size; i++)
            std::cin>>values[i];
    }
}
 
void ArrayOfInt::ConsoleOut()
{
    if( size > 0 ){
        std::cout<<"Array "<<size<<" of int : ";
        for(unsigned i=0; i<size; i++)
            std::cout<<values[i]<<" ";
        std::cout<<std::endl;
    }
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "ArrayOfInt.h"
 
int main()
{
    ArrayOfInt arr1(0), arr2(5), arr3(3);
    arr1.ConsoleIn(); // ничего не произойдёт, массив пустой
    arr2.ConsoleIn(); // просит ввести 5 значений
    arr3.ConsoleIn(); // просит ввести 3 значения
 
    arr1.Add(arr2);
    arr1.ConsoleOut();
 
    arr1.Add(arr3);
    arr1.ConsoleOut();
 
    arr1.Add(arr1);
    arr1.ConsoleOut();
 
    system("pause");
    return 0;
}
Добавлено через 12 минут
я так понимаю это у вас обёртка для динамического массива целых, что бы автоматически вызывались new[] и delete[]
Yandex
Объявления
21.01.2013, 10:01     Метод слияния двух массивов
Ответ Создать тему
Опции темы

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