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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

Динамическая память - C++

28.06.2012, 13:55. Просмотров 896. Ответов 20
Метки нет (Все метки)

Есть 2 массива одной размерности:

C++
1
2
int *m1 = new int [N], 
    *m2 = new int [M];
где N, M некие числа.
Собственно вопрос: как "склеить" m1 и m2 так, что бы в итоге получился некий массив m[N+M] ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 13:55     Динамическая память
Посмотрите здесь:

Динамическая память. - C++
Всем привет! Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их большем количестве в программе вечно...

Динамическая память - C++
Здраствуйте!!!! Помогите выделить память под двумерные массив элементами которого являются слова. Было бы хорошо листинг программы....

Динамическая память - C++
Народ, если кому не сложно помогите переделать вот эту программу со структурами нужно сделать так чтобы для хранения данных она...

Динамическая память - C++
Дано натуральное число n и целые числа{a}_{1},{a}_{2},...,{a}_{n}. Выяснить, есть ли среди цифр {a}_{1},{a}_{2},...,{a}_{n}совпадающие и...

Динамическая память - C++
Как создать массив A через динамическую память ???

Динамическая память - C++
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания. (нужно составить 2 программы с...

Динамическая память - C++
Помогите перевести массивы в динамическую память пожалуйста + почему-то не работает запись в файл(не перезаписывает). #include <iostream>...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
28.06.2012, 14:01     Динамическая память #2
В google вбил "cклейка массивов int" и вот ответ
C
1
2
3
4
5
6
7
8
9
10
void stick(int * p1, int * p2, int * p3, int array_size1, int array_size2)
/* Функция склейки двух массивов p1 и p2 с записью результата в p3 */
{
 int j,i;
 for (i = 0; i < array_size1+array_size2; i++)
 {
  if (i < array_size1) p3[i] = p1[i];
  else p3[i] = p2[i - array_size1];
 }
}
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 14:07  [ТС]     Динамическая память #3
KATbIK,в том-то и дело, что я не хочу тратить время на запись все в третий, а хочу напрямую склеить их. Как будто это изначально был бы один массив. Как сделать это?
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 14:19     Динамическая память #4
Цитата Сообщение от Ksan Посмотреть сообщение
хочу напрямую склеить их
Если реализовать список массивов, интерфейс доступа к элементам и прочие операции, то можешь ты сделать это.
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 14:23  [ТС]     Динамическая память #5
ЛетающийЕнот, то есть, что-то вроде этого:

C++
1
2
3
int **m = new int *[2];
m[0] = a;
m[1] = b;
да?
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 14:32     Динамическая память #6
Вроде того.
OcbMuHor
Заблокирован
28.06.2012, 14:47     Динамическая память #7
Цитата Сообщение от Ksan Посмотреть сообщение
KATbIK,в том-то и дело, что я не хочу тратить время на запись все в третий, а хочу напрямую склеить их. Как будто это изначально был бы один массив. Как сделать это?
распределением памяти занимается ОС и даже не факт что множество физических адресов ОП будет последовательным, тогда как виртуальные адреса будут таковыми. Ты можешь только создать третий массив и скопировать в него элементы из двух других массивов. Это можно сделать, но программа может обрушить всё и вся. Вот пример, он естественно завершит программу с ошибкой сегментации segmentation fault
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
#include <iostream>
#include <iomanip>
 
void fill( int* point, unsigned size )
{
    for ( unsigned i = 0; i < size; ++i  )
        std::cin >> point[ i ];
}
 
void dump( int* point, unsigned size )
{
    for ( unsigned i = 0; i < size; ++i )
        std::cout << std::setw( 3 ) << point[ i ];
    std::cout << std::endl;
}
 
int main()
{
 
    const unsigned n = 4, m = 5;
    unsigned i = 0;
    int *m1 = new int [ n ], *m2 = new int[ m ], *k = m1;
 
    fill( m1, n );
    fill( m2, m );
 
    while( i < n + m ) 
        k[ i ] = ( i < n ? m1[ i++ ] : m2[ i++ - n ] ) ;
 
    dump( m1, n );
    dump( m2, m );
    dump( k, n + m );
 
    delete [] m1;
    delete [] m2;
 
    return 0;
}
а так чтобы "подвинуть" указатель на начало m2 к указателю конца m1, то это нарушит структуру программы.
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 14:59     Динамическая память #8
Логическую адресацию организовать можно зато.
Список массивов как вариант предложил я.
OcbMuHor
Заблокирован
28.06.2012, 15:13     Динамическая память #9
Цитата Сообщение от ЛетающийЕнот Посмотреть сообщение
Логическую адресацию организовать можно зато.
Список массивов как вариант предложил я.
средствами с++? покажи как . Да, ты предложил. Я не предлагал, я сказал что идея не представляет практического интереса, т.е. в такой постановке. Решается она только как показал KATbIK
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 15:15     Динамическая память #10
OcbMuHor, теоретически можно. Хотя действительно бессмысленно при такой постановке вопроса.
Таки да, я умываю руки. :cofee2:
OcbMuHor
Заблокирован
28.06.2012, 15:16     Динамическая память #11
клиенту надо вот это
C++
1
&m1[ n ] = &m2[ 0 ];
только вот какой в этом зашифрован смысл я не понимаю.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,450
Завершенные тесты: 3
28.06.2012, 17:59     Динамическая память #12
Цитата Сообщение от Ksan Посмотреть сообщение
как "склеить" m1 и m2 так, что бы в итоге получился некий массив m[N+M] ?
Можно выделить сразу один кусок:
C++
1
2
3
int * m = new int[N + M];
int * m1 = m;
int * m2 = m + N;
Вот только не очень понятно зачем это.
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 18:13  [ТС]     Динамическая память #13
OcbMuHor, если сделать то, что ты написал, можно ли будет обращаться к одному куску памяти?
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 18:19     Динамическая память #14
Ksan, почему нет?
Должно работать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 18:24     Динамическая память
Еще ссылки по теме:

Динамическая память - C++
Создать одномерный массив в котором хранятся года рождения людей (года вводятся в массив в ручную, размер массива не менее 5). Определить...

Динамическая память с++ - C++
Как использовать динамическую память в с++

Динамическая память [new] - C++
Если записать так: char *p; p = new char; cin&gt;&gt;p; for(int i=0; i&lt;strlen(p); i++) cout&lt;&lt;p&lt;&lt;endl;

Динамическая память - C++
в чем ошибка #include &lt;iostream&gt; #include &quot;conio.h&quot; using namespace std; class{A int a; double b; char s; }

Видеопамять и динамическая память - C++
Появилась необходимость написать программу для работы c видеопамятью и с динамической памятью. А конкретно необходимо осуществляться запись...


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

Или воспользуйтесь поиском по форуму:
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 18:24  [ТС]     Динамическая память #15
Не работает.

Добавлено через 38 секунд
non-lvalue in assignment
Yandex
Объявления
28.06.2012, 18:24     Динамическая память
Ответ Создать тему
Опции темы

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