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

Почему массив не переполняется? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
AdPotam
2 / 2 / 0
Регистрация: 29.11.2010
Сообщений: 73
02.02.2011, 06:52     Почему массив не переполняется? #1
Вот в одной книге есть задание создать вектор и скопировать элементы в массив. Почему массив не переполняется в следующем коде, какая-то загадка для меня. Вроде бы после введения 2-3 элементов он не должен больше принимать, а он принимает, и только после введения 6 элементов программа завершается с ошибкой, а 5 спокойно запоминает, ладно бы вектор, а тут массив, вроде бы с определенным размером:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
int i = 0;
     int ar1[2];
     vector <int> ivec (0);
           while (cin >> i) 
      ivec.push_back(i);
                  for (vector<int>::size_type j = 0; j != ivec.size(); ++j) {
           ar1[j] = ivec[j];
           cout << ivec[j] << ar1[j] << endl;
            }
     getch();
     return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 06:52     Почему массив не переполняется?
Посмотрите здесь:

C++ Массив не сохраняется, почему ?
C++ Почему массив инициализируется с 7-ю элементами?..
Почему не заносит в массив? C++
C++ Почему не сортируется массив?
C++ Почему не сортируется массив?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.02.2011, 16:38     Почему массив не переполняется? #21
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну ответ очевиден - это сделано для скорости. В контейнерах std::vector, std::deque и std::string тоже при указании индекса в квадратных скобках его правильность не проверяется, и если он вышел за пределы, то поведение программы неопределенное. Для получения элемента этих контейнеров по индексу с его проверкой используется функция-член at (которая, естественно, работает медленнее). В случае выхода индекса за пределы она генерирует исключение out_of_range.
Так значит ограниченный?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.02.2011, 18:20     Почему массив не переполняется? #22
Цитата Сообщение от taras atavin Посмотреть сообщение
Так значит ограниченный?
нет, только проверка на попадание в пределы через
Цитата Сообщение от Mr.X Посмотреть сообщение
функция-член at
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 07:10     Почему массив не переполняется?
Еще ссылки по теме:

C++ Почему не сортируется массив?
Переполняется стек C++
Не сдвигается массив. Почему? C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.02.2011, 07:10     Почему массив не переполняется? #23
Цитата Сообщение от AdPotam
Есть легкое удивление, почему это разработчики языка С не додумались жестко ограничить размеры массива, а не провоцировать ситуации, когда возможны всякие ошибки.
код, получаемый после компиляции, должен быть максимально приближен к тому, что было написано
Yandex
Объявления
03.02.2011, 07:10     Почему массив не переполняется?
Ответ Создать тему
Опции темы

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