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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Структура в функции http://www.cyberforum.ru/cpp-beginners/thread766378.html
Помогите разобраться, буду очень благодарен. Цитирую вопрос с лабораторной: У C++ забезпечується можливість передавати як структури за значенням, так і адресу структури. Якщо glitz є змінною типу структура, як ви передасте її за значенням? Як ви передасте її адресу? Функція judge () повертає значення типу int. Як аргументи вона запрошує адресу функції, яка приймає як аргумент покажчик на...
C++ привязка динамической библиотеки, написанной на масм32 к проекту с++ программа калькулятор больших чисел, правильно работает только сложение, но нам пока собственно наплевать, ибо сложение работает и хотя бы его надо запихнуть в проект с++, что собственно ниже и пробую, но пишет при вызове какую-то ересь((( 1>d:\student\asm\bin\длл\test\test\stdafx.h(8): warning C4129: m: неизвестная escape-последовательность 1>d:\student\asm\bin\длл\test\test\stdafx.h(8):... http://www.cyberforum.ru/cpp-beginners/thread766376.html
Создание из двух числовых массивов третьего C++
Есть массив 1 3 22 23 24 43 4 23 24 25 44 5 24 25 26 45 6 25 26 27 46 и массив 2 1 21 41 61 81 3 23 43 63 83 4 24 44 64 84 5 25 45 65 85
C++ Сформировать типизированный файл
Сформировать типизированный файл, в котором хранится информация о сотрудниках подразделения: ФИО, место рождения, год рождения. На его основе сформировать файл сотрудников, родившихся в данном городе и распечатать его. С использованием структур и без использования потоков. Помогитеееее... Вот примерное начало... #define n 5
C++ Преобразование const char* в LPCTSTR VisualStudio2010 http://www.cyberforum.ru/cpp-beginners/thread766348.html
вот код для студии: #include <Windows.h> #include <mmsystem.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static LPCTSTR szAppName=L"HelloWin"; HWND hwnd; MSG msg;
C++ как оформить это на с++? (протабулировать функцию) На интервале с шагом E протабулировать функцию y=x^n! нужно сделать это используя функции и без стандартных подробнее

Показать сообщение отдельно
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
21.01.2013, 10:01     Метод слияния двух массивов
у меня получилось так:

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[]
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru