Размер и емкость вектора?
Я немного смущен, и оба они выглядят одинаково для меня.
Хотя может случиться, что емкость и размер могут отличаться для разных компиляторов. как он может отличаться.
Он также сказал, что если мы потеряли память, емкость изменяется.
Все это немного неясно мне.
Может кто-нибудь дать объяснение. (если возможно, с примером или, если я могу сделать любой тест для любой программы, чтобы понять это)
Ответы
Ответ 1
Размер не может различаться между несколькими компиляторами. Размер вектора - это количество содержащихся в нем элементов, которое напрямую контролируется количеством элементов, которые вы помещаете в вектор.
Емкость - это объем пространства, которое вектор использует в настоящее время. Под капотом вектор просто использует массив. Емкость вектора - это размер этого массива. Это всегда равно или больше размера. Разница между ними - это количество элементов, которые вы можете добавить к вектору, прежде чем массив под капотом нужно перераспределить.
Вы почти никогда не должны заботиться о емкости. Он существует, чтобы люди с очень специфическими ограничениями производительности и памяти выполняли именно то, что им нужно.
Ответ 2
Размер: количество элементов, находящихся в данный момент в векторе
Емкость: сколько элементов может быть помещено в вектор до того, как оно будет "полным". После полного добавления новых элементов будет выделен новый, более крупный блок памяти, и существующие элементы будут скопированы на него
Ответ 3
Скажем, у вас есть ведро. В лучшем случае это ведро может содержать 5 галлонов воды, поэтому его емкость составляет 5 галлонов. Он может содержать любое количество воды от 0 до 5 включительно. Количество воды, в настоящее время в ковше, в векторном выражении составляет его размер. Поэтому, если это ведро заполнено наполовину, оно имеет размер 2,5 галлона.
Если вы попытаетесь добавить больше воды в ведро, и это переполнится, вам нужно найти большее ведро. Таким образом, вы получаете ведро с большей емкостью и сбрасываете содержимое старого ковша в новое, а затем добавляете новую воду.
Емкость: Максимальное количество материала, которое может содержать вектор/ведро.
Размер: количество материала в настоящее время в Vector/bucket.
Ответ 4
size()
указывает, сколько у вас элементов. capacity()
сообщает вам, как большой размер может получить, прежде чем вектор должен перераспределить память для себя.
Емкость всегда больше или равна размеру. Вы не можете индексировать за элементом # size()-1
.
Ответ 5
Размер - это количество элементов в векторе. Емкость - это максимальное количество элементов, которые вектор может удерживать в текущий момент.
Ответ 6
Размер - количество элементов, присутствующих в векторе
Емкость - это количество пространства, которое вектор использует в настоящее время.
Поймите это с помощью очень простого примера:
using namespace std;
int main(){
vector<int > vec;
vec.push_back(1);
vec.push_back(1);
vec.push_back(1);
cout<<"size of vector"<<vec.size()<<endl;
cout<<"capacity of vector"<<vec.capacity()<<endl;
return 0;
}
в настоящее время размер равен 3 и емкость составляет 4.
Теперь, если мы отодвинем еще один элемент,
using namespace std;
int main(){
vector<int> vec;
vec.push_back(1);
vec.push_back(1);
vec.push_back(1);
vec.push_back(1);
cout<<"size of vector"<<vec.size()<<endl;
cout<<"capacity of vector"<<vec.capacity()<<endl;
return 0;
}
Теперь
размер: 4
емкость составляет 4
теперь, если мы попытаемся вставить еще один элемент в vector
, тогда размер станет 5, а емкость станет 8.
это происходит на основе типа данных vector
, как здесь в этом случае vector
in типа int
, так как мы знаем, что размер int
равен 4 байтам, поэтому компилятор выделит 4 блока памяти. и когда мы пытаемся добавить 5-й элемент, vector::capacity()
удваивает то, что у нас есть.
так же продолжайте... например: если мы попытаемся вставить девятый элемент, тогда размер vector
будет равен 9, а емкость будет 16...