Доступ к размеру элемента в векторе C ++

Сегодня я пытаюсь что-то подобное в VS2012 и Max OS 10.7

    vector<int> vec;
vector<int> vec2;
for(int i = 0;i < 100 ;i++){
vec.push_back(i);
}

cout << "size: " << vec.size() << endl;
cout << "capacity: " << vec.capacity() << endl;
cout << vec[127] << endl;
//vec2.reserve(10);
fill_n(vec.begin(),128,-1);
cout << vec[127] << endl;
return 0;

так как мы знаем, что размер вектора — это действительное число элементов в контейнере, приведенный выше код может вызвать ошибку во время выполнения в VS2012, но он отлично работает на Max OS, и я пробую это в Ideone.com и также успешно работать, я не уверен, если что-то не так с определением размера и емкости, почему я могу получить доступ к элементу из размера?

PS: емкость в этой ситуации на моем компьютере составляет 141 на VS2012 и 128 на Mac OS и Ideone.com

0

Решение

std::vector оператор [] не выбросит ошибку вне диапазона. Это неопределенное поведение для доступа к элементу больше, чем векторный размер, используя [] оператор.

использование std::vector::at вместо этого, который бросает std::out_of_range

6

Другие решения

Других решений пока нет …