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

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

Войти
Регистрация
Восстановить пароль
 
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
#1

Как динамически выделять память на один элемент массива? - C++

07.10.2013, 23:13. Просмотров 379. Ответов 5
Метки нет (Все метки)

Вот программа:
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
int main()
{
    int n,a,b;
    Item *mas;
    cout << "Enter amount of coordinates" << endl;
    cin >> n;
    cout << "Enter coordinates" << endl;
 
    for(int i = 0; i < n; i++)
    {
         cin >> a;
         cin >> b;
         mas = new Item;
         mas[i].x = a;
         mas[i].y = b;
    }
 
    cout << endl;
 
    for(int i = 0; i < n; i++)
    {
         cout << mas[i].x << endl;
         cout << mas[i].y << endl;
    }
 
    return 0;
}
Как сделать, чтобы память выделялась постепенно для каждого элемента массива, а не вся сразу mas = new Item[n]
При такой реализации выводит только последнее значение.

Добавлено через 6 минут
При такой реализации программа вообще виснет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 23:13     Как динамически выделять память на один элемент массива?
Посмотрите здесь:

C++ Как динамически выделить память для строкового массива?
C++ Как засунуть в один элемент массива слово?
C++ Как лучше выделять память: динамичски или в стэке?
C++ Как захватить динамически память, не зная заранее, какое количество памяти надо?
Дан массив A[20] и B[10] после каждой пары элемента массива A вставить один элемент массива B C++
Нужно ли под массив выделять память функциями malloc или new? C++
C++ Как выделить динамически память для данных класса
C++ Как динамически выделить память для конструкторов класса?
C++ Записать два элемента одного массива, как один элемент другого
C++ Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc?
C++ Как можно взять один элемент двумерного массива и сравнить его с элементами его строки?
C++ Как и когда правильно освобождать динамически выделенную память?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,950
Записей в блоге: 2
Завершенные тесты: 1
07.10.2013, 23:14     Как динамически выделять память на один элемент массива? #2
Перевыделять память когда нужно с копированием элементов из старой памяти в новую, после чего старую память освобождать.
А еще лучше воспользоваться контейнером.
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
07.10.2013, 23:21  [ТС]     Как динамически выделять память на один элемент массива? #3
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
#include <iostream>
 
using namespace std;
 
struct Item
{
    float x;
    float y;
};
 
int main()
{
    int n,a,b;
    Item *mas;
    cout << "Enter amount of coordinates" << endl;
    cin >> n;
    cout << "Enter coordinates" << endl;
 
    for(int i = 0; i < n; i++)
    {
         cin >> a;
         cin >> b;
         mas = new Item;
         mas[i].x = a;
         mas[i].y = b;
    }
 
    cout << endl;
 
    for(int i = 0; i < n; i++)
    {
         cout << mas[i].x << endl;
         cout << mas[i].y << endl;
    }
 
    return 0;
}
Вы можете модифицировать эту программу, чтобы память выделялась для каждого элемента массива, а то я так не понимаю.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,950
Записей в блоге: 2
Завершенные тесты: 1
07.10.2013, 23:26     Как динамически выделять память на один элемент массива? #4
Цитата Сообщение от Sammm Посмотреть сообщение
Вы можете модифицировать эту программу, чтобы память выделялась для каждого элемента массива, а то я так не понимаю.
А чем не устраивает вариант "Выделить память сразу для всех элементов"?
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
07.10.2013, 23:30  [ТС]     Как динамически выделять память на один элемент массива? #5
Мне надо не для этой легкой программки, а для более сложной, там надо выделять по ходу ее выполнения разное количество памяти.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,950
Записей в блоге: 2
Завершенные тесты: 1
07.10.2013, 23:48     Как динамически выделять память на один элемент массива? #6
Цитата Сообщение от Sammm Посмотреть сообщение
а для более сложной
тогда используйте контейнеры (можете даже свой написать)

Цитата Сообщение от Sammm Посмотреть сообщение
не для этой легкой программки
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
#include <iostream>
 
using namespace std;
 
struct Item
{
    float x;
    float y;
};
 
void copy_array_from ( Item * dest , const Item * src , size_t size ) {
    for ( size_t i = 0 ; i < size ; ++ i )
        dest [ i ] = src [ i ] ;
}
int main()
{
    int n,a,b;
    int size = 0 ;
    Item *mas = NULL ;
    cout << "Enter amount of coordinates" << endl;
    cin >> n;
    cout << "Enter coordinates" << endl;
 
    for(int i = 0; i < n; i++)
    {
         cin >> a;
         cin >> b;
        if ( i >= size ) {
            Item * newArray = new Item [ i + 1 ] ;
            if ( mas != NULL ) {
                copy_array_from ( newArray , mas , size ) ;
                delete [] mas ;
            }
            size = i + 1 ;          
            mas = newArray ;
        }
         mas[i].x = a;
         mas[i].y = b;
    }
 
    cout << endl;
 
    for(int i = 0; i < n; i++)
    {
         cout << mas[i].x << endl;
         cout << mas[i].y << endl;
    }
    delete [] mas ;
    return 0;
}
Yandex
Объявления
07.10.2013, 23:48     Как динамически выделять память на один элемент массива?
Ответ Создать тему
Опции темы

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