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

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

Войти
Регистрация
Восстановить пароль
 
ilyshka
2 / 2 / 0
Регистрация: 11.04.2011
Сообщений: 36
#1

Написать функцию, которая создает копию другого двумерного динамического массива - C++

10.09.2012, 18:21. Просмотров 1026. Ответов 10
Метки нет (Все метки)

Написать функцию, которая создает копию другого двумерного динамического массива. Тип элемента массива выбрать самостоятельно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2012, 18:21     Написать функцию, которая создает копию другого двумерного динамического массива
Посмотрите здесь:
Написать программу, которая создает свою копию C++
C++ Написать Функцию, которая до динамического массива добавляет блок элементов в заданное место
Передача динамического двумерного массива в функцию C++
C++ Передача двумерного динамического массива чисел в функцию
Вывод динамического двумерного массива через функцию C++
Передача по ссылке двумерного динамического массива в функцию C++
C++ Передача двумерного динамического массива в функцию(объяснение)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.09.2012, 18:50     Написать функцию, которая создает копию другого двумерного динамического массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double **copy_array(double **arr, int m, int n)
{
    double **result = new double *[m];
    
    for (int i = 0; i < m; ++i)
    {
        result[i] = new double [n];
        
        for (int j = 0; j < n; ++j)
            result[i][j] = arr[i][j];
    }
    
    return result;
}
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
10.09.2012, 18:53     Написать функцию, которая создает копию другого двумерного динамического массива #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
double **copy_array(double **arr, int m, int n)
{
    double **result = new double *[m];
 
    for (int i = 0; i < m; ++i)
    {
        result[i] = new double [n];
        memcpy(result[i], arr[i], n);
    }
 
    return result;
}

silent_1991, есть особая разница между Вашим и вариантом с memcpy?
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
10.09.2012, 19:00     Написать функцию, которая создает копию другого двумерного динамического массива #4
Цитата Сообщение от Andsteadur Посмотреть сообщение
silent_1991, есть особая разница между Вашим и вариантом с memcpy?
Кроме того, что у тебя копируется только n / sizeof(double) элементов?
Если бы типом был избран какой-нибудь сложный класс, с memcpy не отработал бы конструктор копирования...
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.09.2012, 19:04     Написать функцию, которая создает копию другого двумерного динамического массива #5
Andsteadur, да чего уж там, давайте сразу std::copy юзать.

Не по теме:

И да, memcpy отработает скорее всего быстрее, нежели мой вариант.

Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
10.09.2012, 19:06     Написать функцию, которая создает копию другого двумерного динамического массива #6
да, точно, в спешке не умножил на sizeof. Насчет конструктора копирования ясно, но для базовых типов, все же лучше использовать memcpy?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.09.2012, 19:08     Написать функцию, которая создает копию другого двумерного динамического массива #7
Andsteadur, по моему мнению, лучше всего использовать универсальный вариант, для которого при изменении типа менять реализацию не придётся. И таким вариантом, несомненно, является std::copy.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
10.09.2012, 19:09     Написать функцию, которая создает копию другого двумерного динамического массива #8
Andsteadur, в общем-то да, его библиотечная реализация обычно сильно быстрее копирования в лоб.
Но универсальность теряется, да.
ilyshka
2 / 2 / 0
Регистрация: 11.04.2011
Сообщений: 36
12.09.2012, 16:38  [ТС]     Написать функцию, которая создает копию другого двумерного динамического массива #9
Не компилирует.
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
51
52
53
54
55
56
57
58
#include <vps\base.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
 
void main()
{ int nstr,nstb,i,j;
  cout<<"Vvedite kol strok i stolbcov\n";
  cin>>nstr>>nstb;
 
  cout<<"kol strok: "<<nstr<<" "<<"kol stolbcov: "<<nstb<<"\n";
 
  int **m;
  m=new int*[nstr];
  for(i=0;i<nstr;i++) m[i]=new int[nstb];
 
  for(i=0;i<nstr;i++)
    for(j=0;j<nstb;j++) m[i][j]=random(1000);
 
  cout<<"Massiv m: \n";
 
  for(i=0;i<nstr;i++)
{
  for(j=0;j<nstb;j++)
{
   cout<<*(*(m+i)+j)<<" ";
}
  cout<<"\n";
}
 
  int **n;
  n=new int*[nstr];
  for(i=0;i<nstr;i++) n[i]=new int[nstb];
 
  cout<<"Massiv n: \n";
 
  for(i=0;i<nstr;i++)
{
  for(j=0;j<nstb;j++)
{
    cout<<*(*(n+i)+j)<<" ";}
  cout<<"\n";}
  pause;
}
double **copy_array(double **arr, int m, int n)
{
    double **result = new double *[m];
 
    for (int i = 0; i < m; ++i)
    {
        result[i] = new double [n];
        
        for (int j = 0; j < n; ++j)
            result[i][j] = arr[i][j];
    }
 
    return result;
}
voral
427 / 407 / 56
Регистрация: 16.03.2008
Сообщений: 2,020
12.09.2012, 16:49     Написать функцию, которая создает копию другого двумерного динамического массива #10
На вскидку заметил:
1. не хватает using namespace std или std:: там где нужно
2. Память не освобождается

Добавлено через 2 минуты
Третье
C++
1
 pаuse;
явная ошибка - если это ф-ия должны быть скобки pause();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2012, 21:24     Написать функцию, которая создает копию другого двумерного динамического массива
Еще ссылки по теме:
C++ Реализовать и протестировать функцию создания двумерного динамического массива
Передача двумерного динамического массива в функцию в качестве параметра C++
C++ Передача двумерного динамического массива в функцию построчно и сортировка
Написать функцию, которая создает файл, заполняя его случайными символами C++
C++ Написать программу, которая создает двумерный массив со случайными числами A[N,M]. Вычислить сумму и число положительных элементов массива

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,485
Записей в блоге: 4
12.09.2012, 21:24     Написать функцию, которая создает копию другого двумерного динамического массива #11
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
51
52
53
54
55
56
57
58
59
60
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include "Math.h"
using namespace std;
void fnCopyArrIntToArrInt(int **fArr,int **sArr, int sz1, int sz2);
void main()
{ int nstr,nstb,i,j;
cout<<"Vvedite kol strok i stolbcov\n";
cin>>nstr>>nstb;
cout<<"kol strok: "<<nstr<<" "<<"kol stolbcov: "<<nstb<<"\n";
int **m;
m=new int*[nstr];
for(i=0;i<nstr;i++) m[i]=new int[nstb];
for(i=0;i<nstr;i++)
for(j=0;j<nstb;j++) m[i][j]=rand();
cout<<"Massiv m: \n";
for(i=0;i<nstr;i++)
{
for(j=0;j<nstb;j++)
{
cout<<m[i][j]<<"\t";
}
cout<<"\n";
}
int **n;
n=new int*[nstr];
for(i=0;i<nstr;i++) n[i]=new int[nstb];
for(i=0;i<nstr;i++)
{
for(j=0;j<nstb;j++)
{
n[i][j]=0;
}
}
cout<<"Massiv n after init by zero: \n";
for(i=0;i<nstr;i++){
for(j=0;j<nstb;j++){
cout<<n[i][j]<<"\t";
}
cout<<"\n";
}
fnCopyArrIntToArrInt(n, m, nstr, nstb);
cout<<"Massiv n after copy m to n: \n";
for(i=0;i<nstr;i++){
for(j=0;j<nstb;j++){
cout<<n[i][j]<<"\t";
}
cout<<"\n";
}
system("pause");
}
 
void fnCopyArrIntToArrInt(int **fArr,int **sArr, int sz1, int sz2){
for(int i=0; i<sz1; i++){
for(int j=0; j<sz2; j++){
fArr[i][j]=sArr[i][j];
}
}
}
Yandex
Объявления
12.09.2012, 21:24     Написать функцию, которая создает копию другого двумерного динамического массива
Ответ Создать тему
Опции темы

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