2015-06-11 5 views
0

В C++, как я могу объявить массив объектов с обязательным строковым аргументом (для параметризованного конструктора) определенного размера, размер которого будет предоставлен пользователем во время выполнения? Предположим, что «Vertex» - это мой класс, для которого требуется аргумент типа строки для передачи параметризованному конструктору при объявлении объекта «Вершина». Когда я пишуОбъявление массива объектов, имеющих введенный пользователем размер

Vertex s=Vertex("xx"); 

это нормально для объявления одного объекта. Но я хочу, чтобы размер массива был от N, который будет получен от пользователя во время выполнения.

В двух словах, я хочу иметь Vertex obj [N]. Каков синтаксис для достижения этого?

** Я хочу, чтобы мой массив объектов с обязательной строкой аргументом, переданным для параметризованного конструктора моего class.The указанного дубликата связан вопрос не имеет, что критерии. **

+1

'Vertex * vArr = new Vertex [N]' или использовать 'std :: vector :: resize (n)' где N задается пользователем. вы должны иметь значение по умолчанию c.tor –

+0

Прочитав первые несколько глав вашей книги на C++. –

+0

@ David Vertex * vArr = new Vertex [N] не работает, поскольку в синтаксисе также требуется строковый аргумент. См. Мой пример. –

ответ

1

Вы можете использовать std::vector вместо массива, он будет расти по мере необходимости.

std::vector<Vertex > vec; 

Если пользователь даст огромное количество, это хороший вариант для резервирования распределения для вектора, чтобы избежать дальнейшего realloaction памяти для вектора с использованием std::vector::reserve()

Так что, если вводимые пользователем огромное количество N,

vec.reserve(N) 
+0

Разве это не возможно с массивом, поскольку у меня были другие операции на основе индекса объекта класса? –

+0

@ starter.pack вы можете передать строковый объект как параметр в конструктор. Никто не возражает против этого. Если вы предпочитаете использовать объект в качестве индекса, я думаю, что вы входите в пару , а ключ - как объект, а значение - соответствующее значение. Для вашего вышеуказанного вопроса, мой ответ использует std :: vector, также вы можете обращаться к элементам с помощью оператора index, такого как массив. В случае массива вам нужно утомительно управлять памятью, но если вы используете вектор, он позаботится об этом. – Steephen

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