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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 192, средняя оценка - 4.94
t3rmin41
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 3
#1

Динамический массив в С++: как поменять длину массива по ходу выполнения программы? - C++

27.10.2008, 16:50. Просмотров 23199. Ответов 6
Метки нет (Все метки)

Есть такая проблема:

есть файл, в котором построчно записаны числа float (1 число - 1 строка). Количество чисел неизвестно. Как сделать так, т.е. какие операции надо объявить, чтоб программа читала всё следующее число и заносила его в массив, как то:
Код
FILE *op;//файл с неизвестным количеством чисел float
float d;
int i=0;
...
while (!feof(op))
{
fscanf(op, "%f",&d);
....//операции, которые надо произвести, чтобы длина массива float array[] увеличилась на единицу
array=d;
i++;
}
То есть, как сначала объявить такой массив, который будет менять свою длину, а затем, как увеличить его длину на единицу и благополучно присвоить значение элементу массива.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2008, 16:50     Динамический массив в С++: как поменять длину массива по ходу выполнения программы?
Посмотрите здесь:

C++ Как "подкрасить" некоторые элементы массива на выводе во время выполнения программы
C++ Как отсортирвоать контейнер, если его тип определяется по ходу выполнения программы? (динамическая идентификация типов)
Куда деваются данные из массива во время выполнения программы? C++
C++ Безопасно ли использовать memcpy при выделении памяти по ходу выполнения програмы
C++ Динамический массив, много циклов и простые числа. Как ускорить работу программы ?
Как объявить динамический массив, чтобы он был виден во всех процедурах программы? C++
Динамический массив структур. Почему данные доступны после выполнения операции delete [] C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sergei
1425 / 692 / 40
Регистрация: 22.04.2008
Сообщений: 1,608
27.10.2008, 16:55     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #2
Можно заносить в динамический массив по одному элементу, то есть чтобы массив увеличивался в размере на один элемент, а можно сделать чтобы он увеличивался в 2 раза
t3rmin41
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 3
27.10.2008, 17:04  [ТС]     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #3
Цитата Сообщение от Sergei Посмотреть сообщение
Можно заносить в динамический массив по одному элементу, то есть чтобы массив увеличивался в размере на один элемент,

Ну и как это сделать? Одно дело - динамически распределить место когда заранее известен размер массива (банально с помощью new) а вот как в цикле сделать чтоб массив по ходу программы увеличивался? Какие операции/функции применять?
Sergei
1425 / 692 / 40
Регистрация: 22.04.2008
Сообщений: 1,608
27.10.2008, 17:05     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Например для добавления одного элемента в дин. массив надо написать
Код
//создаем доролнительный массив 
float *temp;
temp = new float [n];// на кол-во элементов в массиве с данными
//далее копируем все данные из массива op в массив temp
for(int i=0;i<n;i++)
{
   temp[i] = op[i];
}
//удаляем массив ор и создаем заново но на один элемент больше
delete [] op;
op = new float[n+1];
//и копируем данные обратно
for(int i=0;i<n;i++)
{
    op[i]=temp[i];
}
 op[n] = // добавляем элемент в конец
если что-то непонятно то спрашивай
Xentar
Of Wolf and Man
993 / 188 / 4
Регистрация: 09.07.2008
Сообщений: 1,885
27.10.2008, 18:27     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #5
Как сказал Sergei, либо используешь промежуточный массив для увиличения длинны.
Либо как вариант используй двусвязный список - тоже удобная штука, только соответственно памяти будет занимать больше на 2 указателя на элемент списка.
ЗЫЖ
и ДА, я практолог
t3rmin41
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 3
27.10.2008, 18:37  [ТС]     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #6
Да, идея со вторым массивом неплохая, я даже код написал, но он почему-то не работает:

Код
#include <assert.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

main()
{
FILE *op;//файл с неизвестным количеством чисел float
float d;
int i=0;
int n=1;
char buf[10];


op=fopen("data-float.dat","rt");

float *temp;
float *array;
temp = new float [n];
assert(temp!=0);

array = new float [n];
assert(array!=0);

while (!feof(op))
{
fscanf(op, "%s",buf);
d=atof(buf);
array[i]=d;
i++;
for (int j=0; j<i; j++)
{
  temp[j]=array[j];
}

delete []array;
array = new float [i];
assert(array!=0);
for (j=0; j<i; j++)
{
  array[j]=temp[j];
}
delete []temp;
temp = new float [i];
assert(temp!=0);



}

for(int j=0; j<i; j++)
{
printf("%f5.2 \n",array[j]);
}



delete []array;
delete []temp;

getch();
return 0;
}
Кто знает, в чём дело?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2008, 19:26     Динамический массив в С++: как поменять длину массива по ходу выполнения программы?
Еще ссылки по теме:

С++, передача массива в функцию и динамический массив C++
Как создать динамический массив типа string? Как создать класс такого массива? C++
Вынести из программы функцию(динамический массив) C++
C++ Динамический массив. Ошибка при выполнении программы
Одномерный динамический массив. Хочу разобраться (понять) код программы C++

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

Или воспользуйтесь поиском по форуму:
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
27.10.2008, 19:26     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #7
Незнаю подойдет ли, но есть такая замечательная штука, векторы называются
Читать хелп например здеся
http://www.yolinux.com/TUTORIALS/Lin...TL.html#VECTOR
Yandex
Объявления
27.10.2008, 19:26     Динамический массив в С++: как поменять длину массива по ходу выполнения программы?
Ответ Создать тему
Опции темы

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