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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
#1

Обращение к элементам вектора - C++

25.07.2011, 23:24. Просмотров 4629. Ответов 17
Метки нет (Все метки)

Вопрос вот в чем. Есть следующий код:
C++
1
2
3
4
5
6
7
8
9
#include <vector>
#include <iostream>
 
int main() {
 
    std::vector<int> a(10, 1);
 
    std::cout << a[2061];
}
MinGw - его прекрасно компилит, и программа работает! Выводит 55328 А по идее должна вылетать. Если же обратится к 2062 элементу - ошибка при выполнении. Собственно, почему это работает??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2011, 23:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к элементам вектора (C++):

Обращение к элементам вектора - C++
как обратиться к N=43 строке вектора нумерация с 0 vector&lt;int&gt; myVector;

Обращение к элементам массива в C++ - C++
#include &lt;SFML\Graphics.hpp&gt; const int number_units = 1; Sprite Person; Sprite unitsSprite = { Person }; for (int i = 0; i &lt;...

Обращение к элементам string - C++
Здравствуйте, Подскажите пжлст как обращаться к элементам string в данной ситуации: int n; cin &gt;&gt; n string * str = new string; ...

Обращение к элементам матрицы - C++
Всем привет. Вот моё задание: В данной матрице определить произведение абсолютных значений элементов (ПАЗ) в столбцах с a до b. Я написал...

Сортировка эл-ов списка, обращение к элементам - C++
Здравствуйте, мне нужно отсортировать список по алфавиту. Я могу сделать это, если буду сортировать указатели, а как мне сортировать сами...

Обращение к элементам класса через [] - C++
Пишу класс для работы с комплексными числами, почти все готово, осталось только 1 задание.

17
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 23:26 #2
Цитата Сообщение от zuq Посмотреть сообщение
А по идее должна вылетать. Если же обратится к 2062 элементу - ошибка при выполнении.
с чего вы это взяли? доступ к элементу вектора через [] не контролируется
если бы вы написали
C++
1
2
3
4
5
6
7
8
9
#include <vector>
#include <iostream>
 
int main() {
 
    std::vector<int> a(10, 1);
 
    std::cout << a.at(2061);
}
было бы исключение std::out_of_range
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
25.07.2011, 23:27  [ТС] #3
В студии вылетает. Откуда он тогда берет это число?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 23:30 #4
Цитата Сообщение от zuq Посмотреть сообщение
В студии вылетает. Откуда он тогда берет это число?
это в дебаге, а вы поставте release mode
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
25.07.2011, 23:33  [ТС] #5
В relase можно до 2059
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 23:36 #6
а вы не из VS запустите
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
25.07.2011, 23:43  [ТС] #7
Сейчас нашел в книге, что-то вроде - "стандарт ничего не говорит о том, что может произойти в данном случае". Но все же - странно....
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
25.07.2011, 23:45 #8
из под NetBeans (MinGW) что в дебаге, что в релизе выкидывает ексепшн
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 23:49 #9
Цитата Сообщение от zuq Посмотреть сообщение
"стандарт ничего не говорит о том, что может произойти в данном случае"
потому что стандарт не знает что хранится в конкретной ячейке памяти за пределами вектора, undefined behavior
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
25.07.2011, 23:50  [ТС] #10
То есть вы хотите сказать, что результат выполнения будет зависеть от того, что храниться в конкретной ячейке памяти?
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
25.07.2011, 23:59 #11
Результат, в первую очередь, будет зависеть от того, разрешён ли доступ на чтение по данному адресу (это зависит и от ОС и от компилятора). И если вдруг разрешён, тогда уж от того, что там хранится. Но при каждом запуске программы там могут храниться разные данные.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 23:59 #12
deleted
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
25.07.2011, 23:59 #13
Но такое использование — это явная ошибка.
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
26.07.2011, 00:02  [ТС] #14
Понятно, что это ошибка От этого нас может защитить функция at()
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
26.07.2011, 00:04 #15
Может. Но лично я предпочитаю защищаться функцией assert. В рабочем коде, как правило, лишние проверки не нужны. А .at() там, где живучесть программы прежде всего.
0
26.07.2011, 00:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 00:04
Привет! Вот еще темы с ответами:

Обращение к элементам массива структур - C++
Вводим n-ое количество имен и количество оценок каждому из имен.(студент - оценки) #include &lt;iostream&gt; using namespace std; ...

Обращение к определенным элементам vector'а - C++
Всем привет! Появилось потребность в библиотеке vector. Подскажите, как обращаться к элементам вектора. Как обращаться к определенному...

Обращение по адресу к элементам структуры - C++
Есть структура fs: struct fs { f_element; s_element; ... n_element; }; Есть массив указателей на...

Обращение к элементам массива используя указатель - C++
Необходимо написать программу, выделив под массив динамически память. Обращаться к элементам массива необходимо используя указатель. ...


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

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

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