Является ли STL вектор pf указатели на векторы мой лучший вариант? - PullRequest
0 голосов
/ 31 января 2020

В настоящее время у меня есть тонна векторов, в которых есть 1200 элементов, что является избыточным, но может быть использовано. Поэтому мне не нужно перекодировать много вещей, каков наилучший способ создать и выполнить итерацию по списку этих векторов и изменить их размер по мере необходимости? (все они равны по размеру)

Один из моих вариантов - создать указатель (после факта) на каждый вектор, а затем создать вектор этих указателей, который можно повторять для изменения размера. Другим вариантом является создание векторов в первую очередь в виде указателей вместо объектов. Кажется, что это было бы много работы, и в настоящее время у меня есть много кода, где я использую векторные объекты.

Есть ли другие варианты?

Фред Э.

1 Ответ

0 голосов
/ 19 февраля 2020

В C ++ std::vector - это просто оболочка вокруг указателя необработанных данных. Сам вектор хранит данные в куче. Таким образом, вы можете хранить векторы в векторе как объекты или указатели на них.

Самый простой способ - хранить векторы в векторе как объекты, но вы должны тщательно следить за тем, как вы передаете этот внешний вектор в функции. Вы должны всегда передавать его по ссылке или указатель на него, чтобы не запускать копирование всех вложенных векторов. С другой стороны, такой вектор будет автоматически и правильно удалять вложенные векторы, когда его деструктор срабатывает.

Вектор указателей на векторы имеет свои преимущества и недостатки. С одной стороны, когда функция вызывается неточно с этим вектором в качестве параметра, будут скопированы только указатели. С другой стороны, доступ к векторам через указатель влияет на производительность. Кроме того, при хранении указателей на векторы вы должны позаботиться об их удалении самостоятельно.

Если ваши векторы создаются и удаляются в другом месте, и вам нужно только просмотреть их и изменить их в своем коде, то, очевидно, вектор указателей на векторы - ваш лучший выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...