Функция resize()
позволяет вектору содержать необходимое количество элементов. Если нам потребуется меньше элементов, чем в векторном, последние будут удалены. Если мы попросим вектор расти, он увеличит его размер и заполнит вновь созданные элементы нулями.
vector<int> v(20);
for(int i = 0; i < 20; i++) {
v[i] = i+1;
}
v.resize(25);
for(int i = 20; i < 25; i++) {
v[i] = i*2;
}
Но если мы используем push_back()
после resize()
, , он добавит элементы ПОСЛЕ вновь выделенного размера, но не INTO. В приведенном выше примере размер результирующего вектора равен 25, тогда как если мы используем push_back () во втором цикле, это будет 30.
vector<int> v(20);
for(int i = 0; i < 20; i++) {
v[i] = i+1;
}
v.resize(25);
for(int i = 20; i < 25; i++) {
v.push_back(i*2); // Writes to elements with indices [25..30), not [20..25) ! <
}
Тогда в чем же преимущество функции resize()
? Разве это не создает путаницу для индексации и доступа к элементам из вектора?