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

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

Войти
Регистрация
Восстановить пароль
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 338
#1

Массив и вектор - C++

16.05.2014, 15:46. Просмотров 325. Ответов 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
#include <iostream>
#include <conio.h>
#include <vector>
using std::vector;
int main()
{
    setlocale (LC_ALL, "Russian");
    vector<int> num;
    std::cout << " Введите несколько чисел : "  <<std::endl;
    int a;
    char s;
    while (std::cin >> a)
     {   num.push_back(a);
    if(std::cin.get() == '\n')
    {
    int *ar = new int [num.size()];
     for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
     {for(int *q = ar; q != ar + num.size(); q++)
     *ar = *iter;
     std::cout << "Символ массива " << *ar << std::endl;}
     delete [] ar;}
    }
        _getch();
            return 0;
    }
При введение цифр и нажатие энтер выводил след сообщение:
Символ массива ...
Но теперь тот же самый код не чего не делает после нажатие энтер.

Добавлено через 5 минут
В другой теме по другому вопросу посоветовали использовать

C++
1
2
3
....
cin.clear();
while(cin.get() != '\n')
Я не знаю как использовать эту функцию копировать и вставит не получается, не работает код.
А в данной программе оно отменяет инициализацию массива. Не знаю почему но при введение данного кода выдает ошибку типа *ar не инициализирован.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 15:46     Массив и вектор
Посмотрите здесь:

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W - C++
Помогите с задачками 1.Задан вектор X. Положительные числа переписать в массив Y, а отрицательные в массив W. 2.Определить, сколько...

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W - C++
Всем привет=) Помогите оформить правильно, фот наработка: for(int i = 0, j = 0, c = 0; i &lt; 20; i++) { if(x &lt; 0) { ...

Вектор и Массив - C++
Уважаемые! Пошел на курсы учиться С++, но из за завала на работе пропустил много занятий и теперь проблемы с пониманием материала. Если...

Статический массив(вектор) - C++
Здравствуйте, очень нужна помощь. Сроки уже подходят к концу и нету времени разбираться, потому что еще много долгов, помогите пожалуйста с...

Закрутить массив в вектор - C++
На паре задали задачу: Закрутить массив в вектор. Написал вот такое решение: Вопрос можно ли как то оптимизировать? ...

Вектор как массив - C++
Смешно конечно, но я именно массив (ну а точнее вектор создать не могу). Ошибка выскакивает только при запуске Цель, записать в вектор...

Копирование Массив в Вектор - C++
Читаю пример Википедии, там приведен пример, в котором элементы массива копируются в вектор. Для этого используется memcpy, но ниже...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
16.05.2014, 15:50     Массив и вектор #2
Проверил на Visual Sudio - все работает. Попробуйте перезапустить проект
И еще, зачем еще один цикл вот здесь:
C++
1
2
3
4
5
     for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
    {for(int *q = ar; q != ar + num.size(); q++)
     *ar = *iter;
     std::cout << "Символ массива " << *ar << std::endl;}
     delete [] ar;}
Можно сделать проще:
C++
1
2
 for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
     std::cout << "Символ массива " << *iter << std::endl;
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 338
16.05.2014, 16:01  [ТС]     Массив и вектор #3
Воторой цикл копирует элементы вектора в массив. По крайней мере я так думаю.

1 цикл читает элементы вектора, второй цикл копирует элементы вектора в массив.

Добавлено через 2 минуты
Я как бы там ввел динамический, пустой массив. С размером вектора.
C++
1
int *ar = new int [num.size()];
Добавлено через 1 минуту
RamonN, перезапустил проект несколько раз. Не работает. Пользуюсь VS 2012
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
16.05.2014, 16:02     Массив и вектор #4
Altair42, А для чего? в него просто копируются значения вектора и выводятся в поток. Ненужная операция, заменяемая одной строчкой
C++
1
std::cout << *iter << std::endl;
Попробуйте пройтись отладчиком и посмотрите, где у вас программа зависает.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 338
16.05.2014, 16:40  [ТС]     Массив и вектор #5
RamonN, я знаю что не нужная. Цель использовать знание а не написать просто набор символов. Копирование с вектора на макрос может понадобится в реальной программе. Это задача с книги. Я не программирую я только учусь. И такие супер тупые коды один из способов использовать знание.

Добавлено через 11 минут
RamonN,
Цитата Сообщение от RamonN Посмотреть сообщение
Попробуйте пройтись отладчиком и посмотрите, где у вас программа зависает.
Все я нашел проблему. Я не знаю как вы проверили и как у вас заработало, но код не должен был работать. Символ '\n' не был объявлен.

Правильный код
C++
1
2
3
4
5
6
....int a;
    char s='\n';
    while (std::cin >> a)
     {   num.push_back(a);
    if(std::cin.get() == '\n')
    {.....
Но возникает вопрос. Почему не выдал ошибку про не объявленную переменную, при запуске программы.
Aloir
217 / 217 / 13
Регистрация: 17.12.2010
Сообщений: 689
16.05.2014, 16:45     Массив и вектор #6
Altair42, может на не инициализированную?
на них выдаются предупреждения
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 338
16.05.2014, 16:55  [ТС]     Массив и вектор #7
Aloir, спасибо что заметили Но я думал что '\n' в первом коде не объявлен.

Обычно при таком коде программа ругается что b использован без инициализации.
C++
1
2
3
int a;
char b;
while(cin >> a, a != b)
При таком коде ругается компилятор что с не объявлен.
C++
1
2
3
int a;
char b;
while(cin >> a, a != с)
Но почему то на не объявленный, не инициализированный символ новой строки не кто не ругается. И этот символ не работает без объявление.
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
16.05.2014, 18:26     Массив и вектор #8
Цитата Сообщение от Altair42 Посмотреть сообщение
RamonN, я знаю что не нужная. Цель использовать знание а не написать просто набор символов. Копирование с вектора на макрос может понадобится в реальной программе. Это задача с книги. Я не программирую я только учусь. И такие супер тупые коды один из способов использовать знание.

Добавлено через 11 минут
RamonN,
Все я нашел проблему. Я не знаю как вы проверили и как у вас заработало, но код не должен был работать. Символ '\n' не был объявлен.

Правильный код
C++
1
2
3
4
5
6
....int a;
    char s='\n';
    while (std::cin >> a)
     {   num.push_back(a);
    if(std::cin.get() == '\n')
    {.....
Но возникает вопрос. Почему не выдал ошибку про не объявленную переменную, при запуске программы.
А он и не должен ругаться, вы переменную s нигде не используете далее, так что ошибка не обоснована. Переменная может быть не инициализирована сколько угодно, пока вы не начнете ее использовать. Символ '\n' не надо нигде инициализировать, это один из управляющих символов, заранее определенных в системе.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 338
16.05.2014, 18:36  [ТС]     Массив и вектор #9
RamonN, я не про s а про '\n'. Которого раньше не объявил. Если использовать любой символ без объявление компилятор будет ругаться. Но символ новой строки можно использовать сколько угодно без объявление. Компилятор не будет ругаться но программа не будет работать. Как в моем случае. Я там использовал символ новой строки без объявление программа не работало. Объявил символ новой строки программа стало работать. Вот и возник вопрос, почему компилятор не стал ругаться на не объявленный символ?
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
16.05.2014, 18:42     Массив и вектор #10
Altair42, Потому что символ '\n' не нужно нигде объявлять, это управляющий символ, заранее объявленный в системе.
Почему же тогда у меня программа работает без нареканий, значит ошибка явно не в этом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 09:31     Массив и вектор
Еще ссылки по теме:

массив bool и вектор) - C++
Ребята всем привет) ситуация такая скоро сегодня понадобиться написать такую штуку у нас есть куча bool там их 1000000 значений bool...

Функция не видит массив и вектор - C++
Подскажите почему функция не видит вектор phone_book #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; ...

Двумерный массив через вектор - C++
Задача состоит в том, что надо создать массив строк через вектор, т.е. я хочу иметь возмость изменять как количество строк, так и их длину.

ООП Одномерный массив - вектор - C++
Добрый день, помогите пожалуйста с написанием программы Задача следующая Одномерный массив - вектор Вещественный массив...

Массив: считать строки в вектор - C++
вот моя попытка сделать, но во время выполнения вылетает ошибка #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using...


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

Или воспользуйтесь поиском по форуму:
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 338
17.05.2014, 09:31  [ТС]     Массив и вектор #11
RamonN, не знаю как объяснить. Пока не объявлял символ новой строки программа не видел его.
Yandex
Объявления
17.05.2014, 09:31     Массив и вектор
Ответ Создать тему
Опции темы

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