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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 10:42     Инициализация динамического массива #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    int a, i = 0;
    int *array = new int [10];
    std::cout << "Enter numbers " << std::endl;
    while(std::cin >> a)
    { i < 10;
       array[i] = a;
    std::cout << *array << std::endl;
        }
    delete [] array;
    _getch();
        return 0;
}
Как я понял массив имеет ограниченный размер. Если это так? Если размер массива известен. А он известен:
C++
1
int *array = new int [10];
То возникает вопрос. Почему при введение строки, размер которого превышает размер массива, вся строка вводится в массив, как в вектор?
Скрин:
Инициализация динамического массива
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2014, 10:42     Инициализация динамического массива
Посмотрите здесь:

C++ Инициализация динамического массива
C++ Инициализация массива
Инициализация массива C++
C++ Инициализация Динамического массива
C++ Инициализация двумерного Динамического массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 10:45  [ТС]     Инициализация динамического массива #2
Есть большая вероятность что в этой части кода ошибка. (Эта типа имправизация)
C++
1
2
3
4
5
while(std::cin >> a)
    { i < 10;
       array[i] = a;
    std::cout << *array << std::endl;
        }
Но, если это так, почему работает строка?
C++
1
std::cout << *array << std::endl;
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
21.05.2014, 10:48     Инициализация динамического массива #3
Цитата Сообщение от Altair42 Посмотреть сообщение
Почему при введение строки, размер которого превышает размер массива, вся строка вводится в массив, как в вектор?
вы сами то поняли что сказали? я не очень, поясните
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.05.2014, 11:16     Инициализация динамического массива #4
Цитата Сообщение от Altair42 Посмотреть сообщение
Есть большая вероятность что в этой части кода ошибка. (Эта типа имправизация)
и не одна
Цитата Сообщение от Altair42 Посмотреть сообщение
i < 10;
if потеряли, i не меняет своего значение
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 11:24  [ТС]     Инициализация динамического массива #5
Цитата Сообщение от dzrkot Посмотреть сообщение
вы сами то поняли что сказали? я не очень, поясните
Вот ввожу с консоли 14 элементов в место 10. Программа записывает все 14 элементов в массив. Хоть и размер массива 10. Возникает вопрос. Почему?

Добавлено через 6 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
if потеряли, i не меняет своего значение
Причем тут if ?
Я использовал цикл while. И i меняет свое значение. А то строка -
C++
1
std::cout << *array << std::endl;
Должен был выводит только первый элемент. Посмотрите на скрин.
Этот же код писал с if. Первичный код был таким
C++
1
2
3
4
.....
if(std::cin >>a)
for(int i =0; i<10; i++)
.......
Инициализировался только первый элемент 10 раз.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
21.05.2014, 11:58     Инициализация динамического массива #6
не понимаю что вы пишите, у вас каша в голове похоже... или у меня...

Цитата Сообщение от Altair42 Посмотреть сообщение
Вот ввожу с консоли 14 элементов в место 10. Программа записывает все 14 элементов в массив. Хоть и размер массива 10. Возникает вопрос. Почему?
потому что у вас запись всёвремя в array[0]

Цитата Сообщение от Altair42 Посмотреть сообщение
Причем тут if ?
Я использовал цикл while. И i меняет свое значение. А то строка -
у вас в коде написано i<10; к чему это?
так и не увидел где i меняется


вы можете по-человечески вопрос сформулировать?
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 15:00  [ТС]     Инициализация динамического массива #7
Цитата Сообщение от dzrkot Посмотреть сообщение
потому что у вас запись всё время в array[0]
И как правильно переписать мой код? Я вообще представление не имею как сохранит введенные через консоль элементы в массив. Я могу сохранит их в вектор потом скопировать в массив.

Цель программы сохранит цифры, которых я ввожу через клавиатуру, в массив.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
21.05.2014, 15:05     Инициализация динамического массива #8
Цитата Сообщение от Altair42 Посмотреть сообщение
И как правильно переписать мой код? Я вообще представление не имею как сохранит введенные через консоль элементы в массив. Я могу сохранит их в вектор потом скопировать в массив.
мб прочитать любую книгу про массивы будет быстрее и полезнее чем ждать ответ на столь примитивный вопрос?
const int size=20;
for (int i=0;i<size;i++)
cin>>a[i];
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 18:24  [ТС]     Инициализация динамического массива #9
Цитата Сообщение от dzrkot Посмотреть сообщение
мб прочитать любую книгу про массивы будет быстрее и полезнее чем ждать ответ на столь примитивный вопрос?
Это может быт для вас примитивный вопрос. А для меня примитивней инициализировать массив с консоли с помощю вектора (инициализировать вектор с консоли и скопировать элементы вектора в массив.)
Я еще раз перелистал книгу. Прочел все что было связано с массивами (исключение то что в следующих главах до которых не дошел. Не знаю что там). В книге пока не пишет как инициализировать массив с консоли.

В принципе этот код мне знаком, видел его в видео уроках в Ютуб. Забыл о нем. Спасибо что напомнили.

Добавлено через 1 минуту
dzrkot, к стати я не просто жду ответа на форуме. Я занимаюсь другими делами пока жду. Луше заниматься чем то полезным пока жду ответа чем искать какую то книгу про массивы когда у меня есть уже книга, которого посоветовали на этом форуме и там пока не написано как это делать.
karaulov6
15 / 15 / 1
Регистрация: 23.03.2013
Сообщений: 140
21.05.2014, 18:36     Инициализация динамического массива #10
не могу понять о каком векторе идет речь, может так???

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
>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
    cout << "Enter count:";
    int count = 0;
    cin >> count;
 
 
    //vector массив
    vector<int> vectorarray;
 
 
    for ( int i = 0; i < count; i++ )
    {
        int tmpvalue = 0;
        cout << "Enter " << i+1 << " integer: ";
        cin >> tmpvalue;
        vectorarray.push_back( tmpvalue );
    }
    //числовой массив
    int * integerarray = new int[ count ];
 
 
    //копировать vector массив в числовой
    for ( unsigned int i = 0; i < vectorarray.size( ); i++ )
    {
        integerarray[ i ] = vectorarray[ i ];
    }
 
    //очистить вектор
    vectorarray.clear( );
 
    //отобразить введенные цифры
 
    for ( int i = 0; i < count; i++ )
    {
        cout << integerarray[ i ] << endl;
    }
 
    //удалитьмассив
    delete[ ] integerarray;
 
    system( "pause" );
 
}
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
21.05.2014, 19:11     Инициализация динамического массива #11
Altair42, А вы простите чем занимаетесь?Как по-мне так вы специально ерунду пишете.
Цитата Сообщение от Altair42 Посмотреть сообщение
Вот ввожу с консоли 14 элементов в место 10. Программа записывает все 14 элементов в массив. Хоть и размер массива 10. Возникает вопрос. Почему?
Вы вообще-то вводите не 14 элементов,а 1.Или вы считаете,что компилятор должен сам заполнить массив из 10 элементов,когда на вход вы ему подаете лишь 1 строку.А программа у вас имеет бесконечный цикл,покажите,где по-вашему свое значение изменяет переменная i,кроме момента объявления переменной?
Цитата Сообщение от Altair42 Посмотреть сообщение
Цель программы сохранит цифры, которых я ввожу через клавиатуру, в массив.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    int main()
{
    int b;
    std::cin >>b;
    int *a = new int [b];
    
        for( int i=0;i<b;i++)
            std::cin >> a[i];
        for( int i=0;i<b;i++)
            std::cout << a[i];
    delete [] a;
        return 0;
}
}
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 19:13  [ТС]     Инициализация динамического массива #12
karaulov6, я бы использовал итераторы но да. Правда способ который показал dzrkot проще. Но я об этом не знал
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
21.05.2014, 19:18     Инициализация динамического массива #13
Хотя цикл у вас не бесконечный,но остановиться он лишь тогда,когда вы попытаетесь записать в a[0] значение равное нулю.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 19:20  [ТС]     Инициализация динамического массива #14
Цитата Сообщение от Tuma Посмотреть сообщение
Altair42, А вы простите чем занимаетесь?Как по-мне так вы специально ерунду пишете.
Я делаю свои первые шаги в "этом мире". Сегодня закончил изучать "Глава 4 Массивы и указатели" - Липпман.

Добавлено через 1 минуту
Цитата Сообщение от Tuma Посмотреть сообщение
Хотя цикл у вас не бесконечный,но остановиться он лишь тогда,когда вы попытаетесь записать в a[0] значение равное нулю.
Не он останавливается норм. Ввожу 5 символов ( без нуля) сохраняет их и показывает.
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
21.05.2014, 19:24     Инициализация динамического массива #15
Altair42, Как уже и писали выше,ваша программа лишь записывает в a[0] какое-либо значение.И еще раз ,эта программа остановиться лишь тогда,когда вы введете 0.То что программа выводит значение a[0] не означает,что на завершилась.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 19:40  [ТС]     Инициализация динамического массива #16
Tuma, я уже понял почему запись идет только в а[0]. Но не понял почему цикл бесконечный. Если другии элементы массива не инициализируется явно то они по умолчанию инициализиуются значением 0.

Только что проверил. Цикл бесконечный даже если ввести 0. (Добавил строку после цикла. На него не переходит)

Добавлено через 4 минуты
Примерно такой же код написал для вектора (ранее). Там цикл вообще не переходил на второе действие (запоминал вводимые данные в вектор и все) Пока не ввел функцию if чтоб завершит ввод в вектор ( с работой функции cin.get(), cin.clear() не знаком только разок показали код и не работает, когда дойду до него тогда и начну использовать )
karaulov6
15 / 15 / 1
Регистрация: 23.03.2013
Сообщений: 140
21.05.2014, 19:42     Инициализация динамического массива #17
Tuma, Его цикл закончится если ввести не число
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
21.05.2014, 19:50     Инициализация динамического массива #18
Altair42, цикл бесконечный потому что у вас условие в нем такое
C++
1
while(std::cin >> a)
,то есть пока существует a,то он будет выполняться,как только а=0,
C++
1
while(0)
то ничего не произойдет.
Так же может быть вам стоит в качестве пособия использовать не одну книгу,а несколько.Например, "Оверленд Б. - C++ без страха" (вроде все понятно написано).

Добавлено через 7 минут
Ну при a=0 тоже работает,значит я не прав.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
21.05.2014, 20:05  [ТС]     Инициализация динамического массива #19
Tuma, я не жалуюсь на книгу все написано вполне понятно. Некоторые детали оставлено на потом для глубокого изучение в нужных разделах. Пока только основы.
Но спасибо за книжку. Обязательно посмотрю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 21:12     Инициализация динамического массива
Еще ссылки по теме:

Инициализация N-мерного динамического массива C++
C++ Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости C++

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
21.05.2014, 21:12     Инициализация динамического массива #20
Цитата Сообщение от Altair42 Посмотреть сообщение
Tuma, я не жалуюсь на книгу все написано вполне понятно.
как вы умудрились дойти до STL библиотек и итераторов, при этом не зная основ?
По вашему Липпману отзывов хороших не нашёл, сам не читал не знаю, но имхо Дейтл "Как программировать на С++" и С.Прата"Язык программирования С++" лучше. Начните лучше читать что-то из этого (Прата потяжелее но имхо поинтереснее)
Yandex
Объявления
21.05.2014, 21:12     Инициализация динамического массива
Ответ Создать тему
Опции темы

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