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

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

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

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

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

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

есть файл, в котором построчно записаны числа float (1 число - 1 строка). Количество чисел неизвестно. Как сделать так, т.е. какие операции надо объявить, чтоб программа читала всё следующее число и заносила его в массив, как то:
C++
1
2
3
4
5
6
7
8
9
10
11
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++
собсно #include <windows.h> #include <stdio.h> #include <vector> #include <list> #include <algorithm> #include <cxxabi.h> ...

Как объявить динамический массив, чтобы он был виден во всех процедурах программы? - C++
Доброго времени суток! Суть проблемы: в Visual Studio создана форма с кнопкой, при нажатии на которую, из файла считываются необходимые...

Динамический массив структур. Почему данные доступны после выполнения операции delete [] - C++
Всем привет! Выполнил вот такое задание. После того как вывелись данные трех структур, очищаю выделенную область памяти оператором delete...

Безопасно ли использовать memcpy при выделении памяти по ходу выполнения програмы - C++
Безопасно ли использовать memcpy при выделении памяти по ходу выполнения програмы. Например: namespace { static int fieldCnt...

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

Вынести из программы функцию(динамический массив) - C++
Код рабочий.Не могу вынести правильно из кода функцию транспортировки матрицы.Задание: Напишите функцию транспонирования матрицы с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sergei
1428 / 695 / 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
1428 / 695 / 40
Регистрация: 22.04.2008
Сообщений: 1,608
27.10.2008, 17:05     Динамический массив в С++: как поменять длину массива по ходу выполнения программы? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Например для добавления одного элемента в дин. массив надо написать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//создаем доролнительный массив 
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
Да, идея со вторым массивом неплохая, я даже код написал, но он почему-то не работает:

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
61
62
63
64
#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++
Программа должна предоставить заполнение массива пользователю, а дальше вывести массив на экран. (Массив динамический) При компиляции...

Одномерный динамический массив. Хочу разобраться (понять) код программы - C++
Вот такая вот задача: Написать прог-му которая для вещественного массива из (n) элементов определяет сумму элементов расположенный...

Куда деваются данные из массива во время выполнения программы? - C++
Во время выполнения проги куда-то деваются данные из массива из стуктур. Почему так происходит? 1. Ввожу данные о 3 студентах в массив...

С++, передача массива в функцию и динамический массив - C++
Привет, помогите пожалуйста переделать программку в динамический массив и с помощью передачи массива в функцию #include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
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     Динамический массив в С++: как поменять длину массива по ходу выполнения программы?
Ответ Создать тему
Опции темы

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