Как инициализировать указатель на объект внутри std :: array (container)? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть этот массив:

std::array<dto_s, nQ> Q;

И я хочу иметь еще один массив указателей на объекты в Q. (представляет дельта-функцию DFA)

Как инициализироватьмассив?

Мой вопрос о том, что такое тип данных объектов в массиве?

Это не работает:

std::array<dtos,nQ> deltafunction[nDelta];

1 Ответ

0 голосов
/ 10 ноября 2019

Как уже упоминалось, тип этих объектов dto_s* (или dtos*, вы использовали два разных написания). В коде инициализации вы смешиваете std::array с массивами в стиле C ([nDelta]). Если вам нужен массив указателей, используйте

std::array<dto_s*,nDelta> deltafunction;

(при условии, что nDelta - это ваше необходимое количество указателей). Если вам нужен массив массивов указателей (т. Е. Массив для каждого объекта в Q, как предполагает ваш код), вам не следует смешивать эти два типа массивов, а использовать

std::array<std::array<dto_s*, nDelta>, nQ> deltafunction

Но, пожалуйста, будьте предельно осторожныс указателями на члены массива. Если вы скопируете оба массива, элементы копии Q будут на новых позициях, но указатели в копии deltafunction будут по-прежнему указывать на элементы Q. Здесь есть высокий риск ошибок. Я советую вам не использовать указатели для идентификации элементов Q, а вместо этого ссылаться на них по индексу в Q.

Особенно, если вы в какой-то момент измените свой код с std::array на std::vector, это рискованно, поскольку std::vector можно перераспределить (другими словами, элементы можно переместить на новые позиции) просто, еслиВы добавляете новый элемент.

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