2015-06-28 6 views
0

Если у меня есть заявление в моей программе C++, какНевозможно понять Реализация списка в C++

list <int> *adj; 

adj = new list <int> [V]; 

что же [v] означает здесь это означает размер списка или номер списка Создаваемые.

Извините за такой глупый вопрос, но я искал много места, но без четкого ответа.

Edit 1: добавлена ​​декларация списка

+0

Это означает массив 'list's. Таким образом, количество создаваемых списков. –

+0

Каждая книга основы будет охватывать это. И это не список, а массив. – deviantfan

+0

@deviantfan на самом деле это массив списков. – kritzikratzi

ответ

1
adj = new list[V]; 

Я надеюсь, что у вас есть класс list и имеет конструктор, либо по умолчанию, или определенный пользователем открытый конструктор не принимает какого-либо параметра, это означает, что по умолчанию constructable. И V - целое число.

Если вы используете просто list adj[V] системы создает массив list размера V, так что ваш list конструктора получит называть V раз.

new Оператор выделяет память и вызывает конструктор.

Так и освободить уничтожить все V объектов list, которые вы создали, вы должны позвонить удалить следующий

delete [] adj; 
+0

'list' нуждается в построении по умолчанию. – juanchopanza

+0

@juanchopanza Спасибо, я исправил свое заявление – Steephen

0

Это называется new[] оператор.

Он выделяет и инициализирует память для массива list с размером V и возвращает указатель list, указывающий на первый элемент массива.

1

Этот вид выражения

new X[N] 

выделяет массив типа Х и длиной N, и оценивает в указатель на его первый элемент.

Такого рода заявления

x = new X[N]; 

присваивает результат выражения на правой стороне = в x.

Итак, вы динамически выделяете массив объектов V типа list, ans присваивая указатель первому элементу adj.

Это не имеет никакого отношения к реализации list.

+1

OP - это новичок, я предполагаю, что предлагаю удалить аббревиатуры и объяснить их в полном объеме. Например, «RHS». –

+0

@JameyD Я удалил RHS. – juanchopanza

1

new list[V] означает, что вы создать list типа массив длиной V


новый является оператором C++, он работает удар:

  1. таНос номер: malloc(sizeof(list)*V)
  2. сделать некоторую инициализацию: вызовите функцию построения по умолчанию для инициализации каждого значения в массиве
  3. дайте поу среди массива

`

+0

Нет требования, чтобы любая форма 'operator new' вызывала' malloc() 'Также нет ничего, что помешало бы форме массива' operator new' от размещения большего объема памяти, чем запрашивалось. Фактически, общий выбор реализации выделяет больше для бухгалтерии, поэтому форма массива оператора 'delete' может правильно высвободить указанное количество элементов. – Peter

+0

@Peter Я согласен с вами, я просто покажу, как новые работы – kiviak

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