C ++ указатель на вектор против указателя на векторные элементы - PullRequest
0 голосов
/ 26 июня 2018

небольшой вопрос об указателях на векторы, чтобы выяснить, что имеет больше смысла в этом случае (матрицы могут быть довольно большими):

typedef std::vector<double> Matrix;  

// Pointer to the whole vector
std::unique_ptr<std::vector<Matrix>> _matrices;
// or vec on stack and point to each element
std::vector<std::unique_ptr<Matrix>> _matrices;

Есть ли заметная разница (кроме работы с указателями Matrix против ссылок Matrix)?

Заранее спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Векторы имеют внутренний указатель, указывающий на данные, которые они содержат.Таким образом, вам не нужен указатель на сам вектор, независимо от размера данных.

Например, если вам нужен доступ к внутреннему указателю, вы можете получить его так:

// just for show, don't do this unless you absolutely must
Matrix* matrix = _matrices.data(); 

Основная причина наличия векторов указателей на использование полиморфизма , но это не так в вашем случае.В противном случае введение указателей является излишним и менее эффективным.

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

В этом случае std :: shared_ptr может иметь смысл:

std::shared_ptr<std::vector<Matrix>> shared_matrices;

Но я думаю, что это будет довольно редко.

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