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

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

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

Вектор выходит за диапазон - C++

25.08.2016, 11:33. Просмотров 154. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Как сделать так чтобы вектор не выходил за диапазон?
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
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    int k;
 
    vector<int> ivec = { 2,3,4,5,6 };
 
 
    for (int k=0; k != ivec[ivec.size()]; ++k)
    {
        cout << (ivec[k] % 2 != 0) ? "Good luck" : "False";
 
        if (ivec[k] % 2 != 0)
            ivec[k]*=ivec[k];
 
        else ivec[k] =ivec[k];
    }
 
 
    for (auto c : ivec)
 
 
    {
        cout << c << endl;
    }
    system("pause");
 
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2016, 11:33     Вектор выходит за диапазон
Посмотрите здесь:

C++ Диапазон
C++ Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы
Диапазон вывода C++
контейнер -вектор вложеный в вектор C++
C++ задан вектор С, который состоит из 12 действительных чисел. Сформировать вектор D, нечетные элементы которого есть целая часть нечетных
диапазон инта C++
C++ Диапазон в switch c++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hikari
Хитрая блондиночка $)
1447 / 954 / 285
Регистрация: 21.12.2015
Сообщений: 3,798
25.08.2016, 11:36     Вектор выходит за диапазон #2
Цитата Сообщение от Protss Посмотреть сообщение
k != ivec[ivec.size()]
Какой смысл этого условия?
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
25.08.2016, 11:38     Вектор выходит за диапазон #3
Цитата Сообщение от Protss Посмотреть сообщение
Как сделать так чтобы вектор не выходил за диапазон?
Не писать подобного: ivec[ivec.size()].
Ferrari F1
=^_^=
512 / 408 / 88
Регистрация: 27.01.2015
Сообщений: 2,344
Записей в блоге: 1
Завершенные тесты: 1
25.08.2016, 11:44     Вектор выходит за диапазон #4
Protss, для прохода по вектору используй итераторы, ну или цикл for по диапазону
Protss
0 / 0 / 0
Регистрация: 15.08.2016
Сообщений: 40
25.08.2016, 12:20  [ТС]     Вектор выходит за диапазон #5
Понятно, а я думал что вектор все равно выходит за диапазон k=5, но условие останавливает его. Но факт что он выходит)
А я тут нагородил, нужно ivec.size()

Добавлено через 9 минут
Скажите, а почему у меня выводится при k=0 010104, а при остальных k ( 9,16....)?

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
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    int k;
 
    vector<int> ivec = { 2,3,4,5,6 };
 
 
    for (int k=0; k != ivec.size(); ++k)
    {
        cout << (ivec[k] % 2 != 0) ? ivec[k]*=ivec[k] : ivec[k]=ivec[k];
 
    }
 
 
    for (auto c : ivec)
 
 
    {
        cout << c << endl;
    }
    system("pause");
 
 
 
    return 0;
}
Добавлено через 22 минуты
Кликните здесь для просмотра всего текста
с помощью итераторов, такой же вывод
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
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    int k;
 
    vector<int> ivec = { 2,3,4,5,6 };
 
 
    for (auto beg=ivec.begin(); beg != ivec.end(); ++beg)
    {
        cout << (*beg % 2 != 0) ? *beg*=*beg : *beg=*beg;
 
    }
 
 
    for (auto c : ivec)
 
 
    {
        cout << c << endl;
    }
    system("pause");
 
 
 
    return 0;
}
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
25.08.2016, 13:10     Вектор выходит за диапазон #6
Потому что скобочки надо уважать:
C++
1
cout << ((ivec[k] % 2 != 0) ? ivec[k]*=ivec[k] : ivec[k]=ivec[k]);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2016, 13:50     Вектор выходит за диапазон
Еще ссылки по теме:

Считать вектор из файла, записать вектор в файл C++
Диапазон и поиск C++
C++ Rand() выходит за диапазон
C++ Вектор ссылок и вектор указателей
Вектор с неизвестным количеством чисел преобразовать в другой вектор, где числа будут стоять по возрастанию C++

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

Или воспользуйтесь поиском по форуму:
keeperkira
1 / 1 / 1
Регистрация: 24.08.2016
Сообщений: 15
25.08.2016, 13:50     Вектор выходит за диапазон #7
ivec[ivec.size()]

тут и происходит выход за диапазон. размер массива у тебя равен 5. значит запись имеет вид ivec[5];а это уже 6 элемент массива
C++
1
2
3
4
5
6
ivec[0] //1
ivec[1]//2
ivec[2]//3
ivec[3]//4
ivec[4]//5
ivec[5]// 6 элемен, ошибка!!!
решение ivec[ivec.size()-1]
Yandex
Объявления
25.08.2016, 13:50     Вектор выходит за диапазон
Ответ Создать тему
Опции темы

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