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

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

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

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

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

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

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

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

Объединение двух динамических массивов
Не могу соединить два динамических массива в один большой (под катом описание проблемы): cin >> n;...

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

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

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

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

Раз у тебя одновременно могут храниться полезные данные в первом массиве, во втором и во временном, то меньше чем тремя массивами ты не обойдешься.
1
alkash123
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 11
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
1299 / 961 / 296
Регистрация: 28.07.2012
Сообщений: 2,657
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 / 0
Регистрация: 06.06.2015
Сообщений: 11
30.06.2016, 20:17  [ТС] 5
nonedark2008, спасибо. смеюсь со своей глупости сейчас.
0
30.06.2016, 20:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2016, 20:17

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

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

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


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

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

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