Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
alkash123
0 / 0 / 1
Регистрация: 06.06.2015
Сообщений: 8
#1

Поочередная загрузка двух динамических массивов - C++

30.06.2016, 19:02. Просмотров 176. Ответов 4

Всем доброго дня.
Такая задача: в программе существуют 2 динамических массива. Данные в них загружаются либо с клавиатуры, либо из файла.
Пользователь может выбирать в какой именно массив загрузятся данные. После загрузки значения обоих массивов выводятся на экран.

Необходимо реализовать следующее:
Данные должны сначала загружаться в некий "временный" массив, а затем выбранный пользователем массив должен "сослаться" с помощью указателей на введенный массив, т.е. брать его данные.
Следовательно, такой вопрос: когда пользователь после загрузки данных в первый массив начнет загружать уже второй, то все введенные значения во временном массиве заменятся на новые, так ведь? Получается, что уже ссылающийся на него первый массив будет брать новые значения и "потеряет" старые. Как поступить в таком случае?

Сначала я просто создавал временный динамический массив, а затем в выбранный пользователем массив копировались элементы временного, но преподаватель сказал, что это выделяет больше памяти чем надо, так что этот вариант не подходит.

Буду признателен любой помощи.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2016, 19:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поочередная загрузка двух динамических массивов (C++):

Слияние двух динамических массивов…
Приветствую Вас!:) Задача такая: Даны два массива: A и B (числовые),...

Объединение двух динамических массивов
Не могу соединить два динамических массива в один большой (под катом описание...

Иницилизация двух одномерных динамических массивов в классе
Unit1.h(43): E2451 Undefined symbol 'W' выдает такую ошибку, вопрос почему на...

Вывести уникальные элементы двух динамических массивов
Дано два динамических массива одинаковой размерности. Нужно вывести уникальные...

Заполнение двух динамических массивов случайными вещественными числами
У массивов получаются одинаковые значения, почему? Что посоветуете? #include...

Сложение двух динамических массивов char* в одну строку
В массивы вводятся данные, масcивы вида : int n,k; char *a,*b; a=new...

4
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
30.06.2016, 19:13 #2
alkash123, на практике от тебя требуется создать три массива.
Два под постоянные и один под временный.
Первым шагом заполняется временный массив, а вторым - выбирается куда этот временный массив засунуть: в первый или во второй. Пусть будет первый, тогда достаточно их просто поменять местами (Не копируешь данные, а меняешь местами указатели).

Раз у тебя одновременно могут храниться полезные данные в первом массиве, во втором и во временном, то меньше чем тремя массивами ты не обойдешься.
1
alkash123
0 / 0 / 1
Регистрация: 06.06.2015
Сообщений: 8
30.06.2016, 20:05  [ТС] #3
nonedark2008, попробовал сделать так как вы сказали. вот код: (это отдельно созданная программа для тестирования поэтому такая маленькая)
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
int main(){
    setlocale(LC_ALL, "Russian");
    int i,w;
    int k=4;//размер массива
    int *t = new int[k]; //временный
//  int *m2 = new int[k];
    int *m1 = new int[k];
    for (i=0;i<k;i++){//запись во временный массив
        cout<<i<<" ";cin>>t[i];
    }
    cout<<"where?"<<endl;//вопрос куда записать?
    cin>>w;
    int h; 
    if (w==1) {
        for (i=0;i<k;i++){
            h=*m1;*m1=*t;*t=h;
        }
    }
    cout<<"m1"<<endl;
    for (i=0;i<k;i++){
        cout<<m1[i];
    }
    delete[] t;
    delete[] m1;
    //delete[] m2;
    _getch();
    return 0;
}
судя по результату сделал я неправильно. с указателями мало работал, поэтому не особо понимаю в чем проблема
0
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
30.06.2016, 20:13 #4
Лучший ответ Сообщение было отмечено alkash123 как решение

Решение

alkash123, давай по порядку:
Цитата Сообщение от alkash123 Посмотреть сообщение
for (i=0;i<k;i++)
{ h=*m1;*m1=*t;*t=h;
}
Содержимое цикла от i никаким прямым образом не зависит. Это какая-то фигня.
Я предполагал, что ты сделаешь что-то такое:
C++
1
2
3
4
if (w == 1)
  swap(m1, t);
else if (w == 2)
  swap(m2, t);
Функция swap меняет местами два объекта, у нас это указатели на наши массивы.
1
alkash123
0 / 0 / 1
Регистрация: 06.06.2015
Сообщений: 8
30.06.2016, 20:17  [ТС] #5
nonedark2008, спасибо. смеюсь со своей глупости сейчас.
0
30.06.2016, 20:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2016, 20:17
Привет! Вот еще темы с решениями:

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

Вычисление произведения двух матриц (матрицы реализовать в виде динамических массивов)
написать программу для вычисления произведения двух матриц.матрицы реализовать...

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

Обработка динамических массивов
Для размещения массивов следует использовать динамическую память. Задание В...


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

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

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