Сегодня я пытаюсь что-то подобное в 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
std::vector
оператор []
не выбросит ошибку вне диапазона. Это неопределенное поведение для доступа к элементу больше, чем векторный размер, используя []
оператор.
использование std::vector::at
вместо этого, который бросает std::out_of_range
Других решений пока нет …