2013-11-02 4 views
0

Скажем, у меня есть-структуру, как это:Является ли пустой вектор размером его структуры?

struct vertexNodeInfo 
{ 
    unsigned char level; 
    int node; 
    double leaf; 
}; 

Если бы я тогда имел это:

vector<vertexNodeInfo> node; 

Насколько велика (память-накрест, не .size) будет пустой вектор, перед любым push_back? Будет ли он точно такого же размера (опять же, с точки зрения памяти) как vector<int> node;?

+0

Этого достаточно для хранения указателя на некоторые данные, размер или конец данных и его емкость. Попробуйте 'sizeof (std :: vector )'. Размер не зависит от количества элементов, которые он удерживает в любой момент времени. – juanchopanza

+0

@juanchopanza На самом деле я надеялся, что кто-то может просто сказать мне. Я пишу сложную DLL, и я пока не могу ее скомпилировать. Мне нужно знать ответ, прежде чем я смогу закончить его и скомпилировать, поэтому я не могу легко проверить использование 'sizeof'. – Clonkex

+0

@juanchopanza Второй комментарий в случае редактирования не предупреждает вас о комментариях (забыли указать ваше имя при публикации). – Clonkex

ответ

1

Нет требований. Более того, это плохо сформулированный вопрос.

.size этого вектора будет 0, потому что он не имеет элементов.

sizeof не влияет на количество элементов, и, как правило, достаточно большой, чтобы содержать один или два из указателей на тип (который может изменяться сами по себе размер, так что нет никакой гарантии, sizeof(vector<vertexNodeInfo>) и sizeof(vector<int>) равны), размер и емкость.

+0

К сожалению, я не думал об этом. Я имею в виду память. Очевидно, '.size' будет 0 :) Вопрос отредактирован. – Clonkex

+0

@Clonkex sizeof может отличаться. Вы можете заставить ошибку компилятора узнать. –

+0

Так что 'sizeof (vector )' будет больше, чем 'sizeof (vector )'? – Clonkex

1

Как говорит Лучиан, вполне возможно, но не требуется, чтобы sizeof(vector<int>) == sizeof(vector<vertexNodeInfo>).

Кроме того, я не считаю, что стандарт делает какие-либо требования, как к capacity вектора по умолчанию инициализируются:

Initial capacity of vector in C++

Так что это разрешено иметь емкость 10, а это означает, что он имеет выделено достаточно памяти для 10 элементов спереди. Тогда размер этого распределения, конечно, будет зависеть от размера элементов. Вы точно не определяете, что вы подразумеваете под «как большой, память-мудрый», но если вы хотите включить динамические распределения, то это будет один.

Я не думаю, что это было бы очень хорошее исполнение vector, но оно соответствует стандарту.

Смежные вопросы