2015-11-19 4 views
-3

C++ У меня есть структура, которая выглядит следующим образом ...Что Структуры инициализируются как

struct Node { 
    std::string key, value; 
    Node* link; 
}; 

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

Node* linkedlist = new Node[100] 

Как бы я итерацию чтобы подсчитать, сколько структур в настоящее время существует? В настоящее время я реализую hashmap, и мне нужно подсчитать, сколько активных ведер есть.

+0

Не понимаю. Если вы создаете массив из 100 узлов, то у вас есть 100 узлов. – NathanOliver

+0

Но не являются ли их значения не инициализированными? –

+0

'ключ' и' значение' есть. 'link' будет содержать мусор, если вы его не установите. – NathanOliver

ответ

1

Что являются структуры инициализирована, как C++

При использовании

Node* linkedlist = new Node[100]; 

всех элементов массива по умолчанию инициализируется. key и value инициализируются по умолчанию, вызывая конструктор по умолчанию std::string. link по умолчанию инициализирован, то есть левый неинициализирован.

Как бы перечислить количество структур в настоящее время?

Вы не можете сделать это, указав указатель. Поэтому std::vector предпочтительнее динамически распределенных массивов. Вы получаете гораздо больше функциональности с std::vector.

Вместо

Node* linkedlist = new Node[100]; 

использование

std::vector<Node> linkedlist(100); 

Update, в ответ на комментарий OP в

Когда вы не можете использовать std::vector, вы должны следить за от количества элементов в массиве.

int numItems = 100; // It could be obtained from the user input also. 
Node* linkedlist = new Node[numItems]; 

Теперь вы можете рассчитывать на стоимость numItems перебрать массив Node с в остальной части кода.

+0

Большое спасибо за ваш ответ.Я полагаю, я мог бы просто проверить, является ли строка имени пользователя пустой и тем самым определить, используется ли ведро? –

+0

@ Xari, мое предложение будет состоять в том, чтобы избежать необработанного указателя и использовать 'std :: vector'. –

+0

Ах, к сожалению, мой профессор не позволяет мне использовать векторы или умные указатели в этом случае. Поэтому у меня есть трудная проблема, определяющая, как перебирать мои вещи. Обычно я создаю класс для моего LinkedList и назначаю Node nullptr. –

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