Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

16.05.2014, 15:46. Просмотров 338. Ответов 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 не инициализирован.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив и вектор (C++):

Задан вектор 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++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

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

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

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

10
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 138
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;
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
16.05.2014, 16:01  [ТС] #3
Воторой цикл копирует элементы вектора в массив. По крайней мере я так думаю.

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

Добавлено через 2 минуты
Я как бы там ввел динамический, пустой массив. С размером вектора.
C++
1
int *ar = new int [num.size()];
Добавлено через 1 минуту
RamonN, перезапустил проект несколько раз. Не работает. Пользуюсь VS 2012
0
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 138
16.05.2014, 16:02 #4
Altair42, А для чего? в него просто копируются значения вектора и выводятся в поток. Ненужная операция, заменяемая одной строчкой
C++
1
std::cout << *iter << std::endl;
Попробуйте пройтись отладчиком и посмотрите, где у вас программа зависает.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
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')
    {.....
Но возникает вопрос. Почему не выдал ошибку про не объявленную переменную, при запуске программы.
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 692
16.05.2014, 16:45 #6
Altair42, может на не инициализированную?
на них выдаются предупреждения
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
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 != с)
Но почему то на не объявленный, не инициализированный символ новой строки не кто не ругается. И этот символ не работает без объявление.
0
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 138
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' не надо нигде инициализировать, это один из управляющих символов, заранее определенных в системе.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
16.05.2014, 18:36  [ТС] #9
RamonN, я не про s а про '\n'. Которого раньше не объявил. Если использовать любой символ без объявление компилятор будет ругаться. Но символ новой строки можно использовать сколько угодно без объявление. Компилятор не будет ругаться но программа не будет работать. Как в моем случае. Я там использовал символ новой строки без объявление программа не работало. Объявил символ новой строки программа стало работать. Вот и возник вопрос, почему компилятор не стал ругаться на не объявленный символ?
0
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 138
16.05.2014, 18:42 #10
Altair42, Потому что символ '\n' не нужно нигде объявлять, это управляющий символ, заранее объявленный в системе.
Почему же тогда у меня программа работает без нареканий, значит ошибка явно не в этом.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
17.05.2014, 09:31  [ТС] #11
RamonN, не знаю как объяснить. Пока не объявлял символ новой строки программа не видел его.
0
17.05.2014, 09:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 09:31
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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