21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
1

Как склеить два динамических массива

28.01.2020, 17:27. Показов 5414. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
int *a = new int [4];
int *b = new int [10];
В конец массива а дописать b, не используя третьего массива. Не подскажите как лучше?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2020, 17:27
Ответы с готовыми решениями:

Как объединить два динамических массива
,к примеру 1 2 3 5 и 4 5 7 8 9 на выходе 1 2 3 4 5 7 8 9

Как максимально быстро сложить два динамических одномерных массива? SSE?
Всем привет! Нужно максимально быстро сложить поэлементно два байтовых массива. Есть: unsigned...

Два динамических массива в конструкторе класса
Доброго времени суток Вам!) Есть такая проблема, ни как не могу создать сразу два динамических...

Как склеить два файла в один?
Вообщем проблема в том, что мне нужно записывать в начало файла. я создаю новый файл записываю в...

44
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
28.01.2020, 17:37 2
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
В конец массива а дописать b, не используя третьего массива. Не подскажите как лучше?
Никак. Нужно сделать третий массив, размером 4 + 10 и перенести данные в него
1
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,053
Записей в блоге: 2
28.01.2020, 17:56 3
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
int *a = new int [4];
int *b = new int [10];
делайте на упреждение:
C++
1
2
int *a = new int [14];
int *b = a + 4;
0
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
28.01.2020, 20:13  [ТС] 4
oleg-m1973, просто иногда пугает большое количество динамических массивов))

Добавлено через 56 секунд
oleg-m1973, а как обрезать массив динамический?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
28.01.2020, 20:41 5
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
oleg-m1973, а как обрезать массив динамический?
Который выделен по new - никак. Сколько выделил памяти, столько и останется. А так - realloc

Добавлено через 8 минут
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
oleg-m1973, просто иногда пугает большое количество динамических массивов))
А ты делай вот так
C++
1
2
std::unique_ptr<int[]> a(new int [4]);
std::unique_ptr<int[]> b(new int [10]);
0
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
28.01.2020, 21:31  [ТС] 6
oleg-m1973, а это уже вектор?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
28.01.2020, 21:33 7
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
oleg-m1973, а это уже вектор?
Нет, просто массив. Он потом сам удалится.

Добавлено через 1 минуту
Это ты про unique_ptr спрашивал?
0
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
29.01.2020, 10:16  [ТС] 8
Нет, а как лучше склеить два массива в третий?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
29.01.2020, 10:23 9
Лучший ответ Сообщение было отмечено Andy_Coldfield как решение

Решение

Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
Нет, а как лучше склеить два массива в третий?
C++
1
2
3
int *c = new int[4 + 10];
auto it = std::copy(a, a + 4, c);
std::copy(b, b + 10, it);
1
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
29.01.2020, 17:18  [ТС] 10
oleg-m1973, просто я сделал через memcpy, правда прочитал и понял, что это довольно рискованное решение
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
29.01.2020, 17:35 11
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
oleg-m1973, просто я сделал через memcpy, правда прочитал и понял, что это довольно рискованное решение
Ну да, очень рискованное. Лучше используй std::copy и др. - они сами вызовут memcpy, когда надо.
1
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
29.01.2020, 22:56  [ТС] 12
oleg-m1973, a value of type "const void *" cannot be used to initialize an entity of type "const long long *. Не подскажите что это за ошибка? Как ее решить? Вроде все верно...
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
void XOR(const void *a, const void *b, void *c)
{
    int i = 0;
    const long long *A = a, *B = b;
    unsigned long long *C = c;
 
    for (i = 0; i < 8; i++)
    {
        C[i] = A[i] ^ B[i];
    }
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
29.01.2020, 23:08 13
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
oleg-m1973, a value of type "const void *" cannot be used to initialize an entity of type "const long long *. Не подскажите что это за ошибка? Как ее решить? Вроде все верно...
Ну, либо сделай параметры long long *, вместо void *. Либо
C++
1
2
const long long *A = reinterpret_cast<const long long *>(a), ............
    unsigned long long *C = reinterpret_cast<unsigned long long *>(c);
Добавлено через 48 секунд
И там, наверное, лучше везде использовать unsigned типы
1
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
29.01.2020, 23:12  [ТС] 14
да я так и сделал. Но странно, почему возникают такие ошибки?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
29.01.2020, 23:17 15
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
да я так и сделал. Но странно, почему возникают такие ошибки?
Потому что к void * можно преобразовать указатель на любой тип - это просто число, ты с ним особо ничего не сделаешь.
А вот обратно - надо специально указывать к чему ты хочешь его преобразовать - чтоб он автоматически не преобразовывался куда не нужно.
0
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
30.01.2020, 10:51  [ТС] 16
oleg-m1973, а есть функция на с++ которая высчитывает длину Сообщения?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.01.2020, 10:53 17
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
oleg-m1973, а есть функция на с++ которая высчитывает длину Сообщения?
В смысле, какого сообщения?
0
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
30.01.2020, 18:50  [ТС] 18
oleg-m1973, я вот хотел поинтересоваться как реализовать проверку копируемого сообщения. Задача следующая массив бьется на части, каждая часть передаётся в функцию по блокам. И результат записывается в выходной массив. Когда память задаю статически, то есть фиксирую, программа работает. Когда динамически, то повреждается куча. Что делать?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
unsigned char *dynamic = new unsigned char (x*sizeblocks);
unsigned char *in = new unsigned char(lengthIN); // считывается
for(int i = 0; i < x; i++)
{
if (i == x -1)
length = lengthIN - i * sizeblock;
else length = sizeblocks;
funcXOR(in+i * length, length, dynamic + i*sizeblock);
}
0
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,053
Записей в блоге: 2
30.01.2020, 19:11 19
C++
1
2
3
4
5
6
7
8
9
unsigned char* dynamic = new unsigned char(x*sizeblocks);
unsigned char* in      = new unsigned char(lengthIN); // считывается
 
int n = length;
for(int i = 0; i < x; i++)
{   if (i == x - 1)
        n = lengthIN - i * length;
    funcXOR(in + i*length, n, dynamic + i*sizeblock);
}
0
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
30.01.2020, 20:22  [ТС] 20
XLAT, а в чем разница??? Просто сходу могу сказать, что впринципе у нас идентичный код))
0
30.01.2020, 20:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2020, 20:22
Помогаю со студенческими работами здесь

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

Как склеить два куска динамически выделенной памяти?
Есть такой код char *arr = (char *) malloc(1); char *plus = (char *) malloc(25); arr =...

Даны два динамических массива размерами n и m. Создать динамический массив из заданных, путем их объединения.
Даны два динамических массива размерами n и m. Создать динамический массив из заданных, путем их...

Склеить два одномерных массива в один
Помогите склеить два массива в один, остался только цикл Он склеивает только пока что только...


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

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

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