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

Инициализация динамического массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.92
ghost113
Сообщений: n/a
05.12.2008, 22:35     Инициализация динамического массива #1
Прога генерирует случайные числа(1-100) выводит их, пока не встретится 98, сохраняя все в массиве. Но мне нужно очень, чтобы программа сама определяла память в массив, ибо это статический, а мне надо динамический, то есть чтоб само определяло, каков будет его размер. Пробовал, но что-то не получилось ((


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
#include <iostream>
#include <time.h>
 
using namespace std;
 
void main()
{
    const int SIZE = 1000;
    const int MIN = 1;
    const int MAX = 100;
 
 
    int arr[SIZE];
    int i,k;
    srand(time(NULL));
 
    for(i=0;i<SIZE;i++)
    {
      arr[i]=rand()%(MAX-MIN+1)+MIN;
      cout << arr[i]<<endl;
      if(arr[i]==98)
          break;
    }
        
    cin.get();
    
    for(k=(i-1);k>=0;k--)
    {
        cout << arr[k] <<" ";
    }
    cout << endl;
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2008, 22:35     Инициализация динамического массива
Посмотрите здесь:

C++ Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
C++ Инициализация Динамического массива
C++ Инициализация двумерного Динамического массива
Инициализация N-мерного динамического массива C++
C++ Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
C++ Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
C++ Инициализация динамического массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
05.12.2008, 22:38     Инициализация динамического массива #2
Воопервых main() всегда возвращает int.
Не устаю повторять ссылку http://www.research.att.com/~bs/bs_faq2.html#void-main
Во вторых, делай так. Проси пользователя ввести размер, а потом int* a=new int[size];
zzzmaz
Сообщений: n/a
06.12.2008, 06:03     Инициализация динамического массива #3
Если я правильно понял твою проблему, могу посоветовать поступить следующим образом: создаём динамический массив большего размера (что-бы реально хватило) заполняем его, пока не встретится число 98, потом создаём ещё один динамический массив, равный длине последней заполненной ячейке первого массива, копируем в него все данные из первого, первый убиваем.
Prividenie
74 / 74 / 6
Регистрация: 05.10.2008
Сообщений: 233
06.12.2008, 13:06     Инициализация динамического массива #4
удалил его (сообщение свое)
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
06.12.2008, 21:00     Инициализация динамического массива #5
Или кидай не в массив, а в вектор (vector) push_back() и все будет пучком
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
26.10.2009, 12:45     Инициализация динамического массива #6
у меня немного другая проблема, имеется массив float *array в функции main, размер которого я не знаю, а узнаю только в подфункции load, мне необходимо передать этот массив в функцию по ссылке, там задать ему размер, обработать его, и вернуть обратно его же (а не копию). Пишу так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
float *array;
int N;
...........
load(array,&N)
...........
return0;
}
void load(float *array, &N)
{
.............
cin << N;
array = (float *) malloc(N*sizeof(float));
for (int i=0;i<N;i++)
*(array + i)= /*некая информация*/
.............
}
однако указатель из функции не возвращается обратно, на выходе в main тот же указатель, что и был до этого. Я видел другие примеры передачи массивов по ссылке, но там до входа в функцию вызывался malloc и указатель получал своё значение, а мне нужно именно так.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.10.2009, 12:57     Инициализация динамического массива #7
Цитата Сообщение от blackswan Посмотреть сообщение
void load(float *array, &N)
Нужно так:
C++
1
void load(float *&array, &N)
Добавлено через 47 секунд
Но лучше так:
C++
1
float* load(&N) {
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
26.10.2009, 13:12     Инициализация динамического массива #8
большое спасибо, это ,именно, то, что мне нужно. я как-бы имею представление об адресации и передаче параметров, но вот такое хитрое *& как-то забыл, а почему Вы советуете через имя функции? у меня был такой вариант, но я не хотел его делать, мне удобнее так, к тому же у меня такой массив не один.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.10.2009, 13:14     Инициализация динамического массива #9
Цитата Сообщение от blackswan Посмотреть сообщение
а почему Вы советуете через имя ссылки?
Через результат функции. Передача указателя по ссылке, не самая лучшая идея. Вносит путаницу.

Цитата Сообщение от blackswan Посмотреть сообщение
к тому же у меня такой массив не один.
Т.е. функция возвращает несколько массивов?
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
26.10.2009, 13:30     Инициализация динамического массива #10
да, несколько, работа с ними аналогично этому, просто в примере решил узнать за один случай.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2009, 13:55     Инициализация динамического массива
Еще ссылки по теме:

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости C++
C++ Почему при создании динамического массива через new ячейки массива имеют значение -842150451?
C++ Инициализация динамического массива
Обьявление и инициализация динамического двумерного массива в классе C++
Инициализация двумерного динамического массива C++

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

Или воспользуйтесь поиском по форуму:
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.10.2009, 13:55     Инициализация динамического массива #11
blackswan, В общем решать тебе.
Я бы сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct result {
   float* arr1;
   float* arr2;
   int xsize;
   int ysize;
};
..
...
struct result* any_function() {
   struct result* result = new struct result;
   result.arr1 = ...
   result.arr2 = ...
   result.xsize = ...
   result.ysize = ...
   ...
   ...
   return result;
}
Yandex
Объявления
26.10.2009, 13:55     Инициализация динамического массива
Ответ Создать тему
Опции темы

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