размер против емкости вектора? - PullRequest
29 голосов
/ 09 июня 2011

Я немного запутался по этому поводу, оба они выглядят одинаково для меня. Хотя может случиться так, что емкость и размер могут отличаться на разных компиляторах. как это может отличаться Также сказано, что если у нас недостаточно памяти, емкость меняется.

Все эти вещи мне немного непонятны.

Может ли кто-нибудь дать объяснение (если возможно, с примером и если я могу провести какой-либо тест на любую программу, чтобы понять это)

Ответы [ 6 ]

59 голосов
/ 09 июня 2011

Размер не допускается для разных компиляторов.Размер вектора - это количество содержащихся в нем элементов, которое напрямую зависит от того, сколько элементов вы поместили в вектор.

Capacity - это объем пространства, в котором находится векторв настоящее время использую.Под капотом вектор просто использует массив.Емкость вектора - это размер этого массива.Это всегда равно или больше, чем размер.Разница между ними заключается в количестве элементов, которые вы можете добавить к вектору до того, как массив будет перераспределен.

Вы почти никогда не должны заботиться о емкости.Он существует, чтобы позволить людям с очень специфической производительностью и ограничениями памяти делать именно то, что им нужно.

25 голосов
/ 09 июня 2011

Размер : количество элементов в векторе

Емкость : сколько элементов можно уместить в векторе, прежде чем он заполнится. После заполнения добавление новых элементов приведет к выделению нового, большего блока памяти и копированию в него существующих элементов

23 голосов
/ 09 июня 2011

Допустим, у вас есть ведро.Самое большее, это ведро может вместить 5 галлонов воды, поэтому его вместимость составляет 5 галлонов.В нем может быть любое количество воды от 0 до 5 включительно.Количество воды, находящейся в настоящее время в ведре, в векторном выражении равно его размеру.Так что, если это ведро наполовину заполнено, оно имеет размер 2,5 галлона.

Если вы попытаетесь добавить больше воды в ведро, и оно переполнится, вам нужно найти ведро большего размера.Таким образом, вы получаете ведро с большей емкостью и выливаете содержимое старого ведра в новое, а затем добавляете новую воду.

Вместимость: максимальное количество вещей, которые может вместить Вектор / ведро.Размер: Количество материала в настоящее время в векторе / корзине.

6 голосов
/ 09 июня 2011

size() говорит вам, сколько элементов у вас в данный момент. capacity() сообщает вам, насколько большим может быть размер, прежде чем вектор должен перераспределить память для себя.

Емкость всегда больше или равна размеру. Вы не можете индексировать за элементом # size()-1.

5 голосов
/ 18 августа 2016

Размер - количество элементов, присутствующих в векторе

Емкость - количество пространства, которое вектор использует в настоящее время.

Давайтепонять это на очень простом примере:

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 в типе int, как мы знаем, размер int равен 4 байта, поэтому компилятор выделит 4 блока памяти .. и когда мы попытаемся добавить 5-й элемент,vector::capacity() вдвое больше, чем у нас в настоящее время.

То же, продолжайте .. например: если мы попытаемся вставить 9-й элемент, то размер vector будет равен 9, а емкость будет равна 16 ..

5 голосов
/ 09 июня 2011

Размер - это количество элементов в векторе.Емкость - это максимальное количество элементов, которые вектор может в настоящее время содержать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...