C++指向矢量的指针与指向矢量元素的指针

C++ pointer to vector vs pointer to vector elements

本文关键字:指针 元素 C++      更新时间:2023-10-16

关于指向向量指针的小问题,以找出在这种情况下更有意义的方法(矩阵可能很大(:

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;

是否有明显的差异(除了使用矩阵指针与矩阵引用(?

提前感谢!

向量有一个指向它们所持有数据的内部指针。因此,无论数据有多大,您都不需要指向矢量本身的指针。

例如,如果您需要访问内部指针,则可以像这样获取它:

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

拥有指针向量的主要原因是它利用多态性,但在您的实例中并非如此。否则,引入指针是多余的,效率较低。

我能想到指向向量的指针确实有意义的唯一可能的原因是,如果您需要通过不同的组件共享向量的所有权

在这种情况下,std::shared_ptr 可能是有意义的:

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

但我认为这是相当罕见的。