Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

Динамическая память - C++
Всем привет!!! взникла проблема с выполнением строки K=A++; при выполнении printf("\n__________ %d\n",K.gasaaa()); получаю левые...

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

динамическая память.... - C++
Ввести двухмерном массив, для работы с массивом использовать указатель. Массив разместить в динамической памяти. Определение суммы...

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

20
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];
 }
}
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 14:07  [ТС] #3
KATbIK,в том-то и дело, что я не хочу тратить время на запись все в третий, а хочу напрямую склеить их. Как будто это изначально был бы один массив. Как сделать это?
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 14:19 #4
Цитата Сообщение от Ksan Посмотреть сообщение
хочу напрямую склеить их
Если реализовать список массивов, интерфейс доступа к элементам и прочие операции, то можешь ты сделать это.
0
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;
да?
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 14:32 #6
Вроде того.
0
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, то это нарушит структуру программы.
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 14:59 #8
Логическую адресацию организовать можно зато.
Список массивов как вариант предложил я.
0
OcbMuHor
Заблокирован
28.06.2012, 15:13 #9
Цитата Сообщение от ЛетающийЕнот Посмотреть сообщение
Логическую адресацию организовать можно зато.
Список массивов как вариант предложил я.
средствами с++? покажи как . Да, ты предложил. Я не предлагал, я сказал что идея не представляет практического интереса, т.е. в такой постановке. Решается она только как показал KATbIK
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 15:15 #10
OcbMuHor, теоретически можно. Хотя действительно бессмысленно при такой постановке вопроса.
Таки да, я умываю руки. :cofee2:
0
OcbMuHor
Заблокирован
28.06.2012, 15:16 #11
клиенту надо вот это
C++
1
&m1[ n ] = &m2[ 0 ];
только вот какой в этом зашифрован смысл я не понимаю.
0
gray_fox
What a waste!
1552 / 1257 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 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;
Вот только не очень понятно зачем это.
1
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 18:13  [ТС] #13
OcbMuHor, если сделать то, что ты написал, можно ли будет обращаться к одному куску памяти?
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 18:19 #14
Ksan, почему нет?
Должно работать.
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 18:24  [ТС] #15
Не работает.

Добавлено через 38 секунд
non-lvalue in assignment
0
28.06.2012, 18:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 18:24
Привет! Вот еще темы с ответами:

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

Динамическая память - C++
Добрый вечер! Возникла у меня такая проблемка, нужно от статической памяти перейти к динамической. То ли уже голова не варит, то ли руки не...

Динамическая память C++ - C++
Народ, подскажите, плиз, что я делаю не так? Надо посимвольно ститать строку, в процессе выделяя ей ровно столько памяти, сколько...

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


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

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

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