2014-02-12 4 views
0

Теперь у меня есть вектор, называемый «список» из 1000 элементов типа String. Этот вектор заполняется динамически рекурсивной функцией, которая обнаруживает файлы в одном каталоге и загружает их.Могу ли я создать переменную массива с помощью указателей? Как?

Могу ли я использовать массивы для хранения списка элементов, которые занимают только минимальное пространство для хранения? Как?

+0

Если у вас есть статическое количество элементов, да, вы должны использовать массив вместо вектора. – Michael

+3

@ Майкл - это то, что он спрашивал? И, очевидно, если есть сканирование каталога, это не статично. –

+0

@ W.B. да, это * вероятно * не статично, но он также указал, что существует 1000 элементов. – Michael

ответ

3

Вы можете определенно создать массив указателей на std :: string.

Эти элементы по-прежнему занимают место в памяти, хотя, если вы хотите сохранить пространство, вы можете забыть эту стратегию.

Простой способ сэкономить место - это не начинать свой вектор с размера 1000. Векторы занимают минимальное пространство, а затем растут. Это одна из их целей дизайна.

1

Небольшой объем памяти можно сохранить, сохранив каждую строку в узле, содержащем char [], выделенную в соответствии с длиной строки, и указатель на следующий узел, то есть отдельный список.

Это сказало: зачем беспокоиться о струнах O (1000) умеренной длины?

+0

Спасибо за помощь! Я не знаю список «Узел». Вдавите его немедленно. – Delayer

2

Вы можете, выполнив:

std::string * list = new std::string[1000]; 

, а затем вспомнить позже на:

delete [] list; 

Но если вы собираетесь делать это динамически, то вектор будет лучше. Зачем выделять 1000 элементов, когда вам может понадобиться только 300? Также не совсем уверен, почему вы хотите использовать указатель здесь.

+0

Спасибо за помощь! – Delayer

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