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

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

Восстановить пароль Регистрация
 
Protss
 Аватар для Protss
0 / 0 / 0
Регистрация: 15.08.2016
Сообщений: 40
25.08.2016, 11:33     Вектор выходит за диапазон #1
Здравствуйте.
Как сделать так чтобы вектор не выходил за диапазон?
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++
Диапазон значений C++
C++ Диапазон данных
диапазон инта C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hikari
Хитрая блондиночка $)
 Аватар для Hikari
1336 / 899 / 272
Регистрация: 21.12.2015
Сообщений: 3,593
25.08.2016, 11:36     Вектор выходит за диапазон #2
Цитата Сообщение от Protss Посмотреть сообщение
k != ivec[ivec.size()]
Какой смысл этого условия?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
25.08.2016, 11:38     Вектор выходит за диапазон #3
Цитата Сообщение от Protss Посмотреть сообщение
Как сделать так чтобы вектор не выходил за диапазон?
Не писать подобного: ivec[ivec.size()].
Ferrari F1
Заблокирован
295 / 281 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
25.08.2016, 11:44     Вектор выходит за диапазон #4
Protss, для прохода по вектору используй итераторы, ну или цикл for по диапазону
Protss
 Аватар для 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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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++ Диапазон в switch c++
C++ Rand() выходит за диапазон
Диапазон перечислений 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     Вектор выходит за диапазон
Ответ Создать тему
Опции темы

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