如何向shared_ptr添加偏移量?

sol*_*lti 4 c++ c++11

我试图为我的矩阵类创建一块内存,因为std::vector<std::vector<double>>它没有给出我想要的性能.所以我决定使用单个1d阵列.所以我想到使用double的shared_ptr.

要声明我做的变量:

std::shared_ptr<double> matrix;

为已声明的共享指针分配内存我做了:

matrix = std::make_shared<double []> (row*col);

现在访问元素以将某些内容分配给矩阵中的特定位置:

*(matrix + r*col + c) = 0.0;

这给了我错误的说法

`error:'operator +'不匹配(操作数类型是'std :: shared_ptr'和'size_t')

我以为我们可以使用+指针.为什么不让我为指针添加标量值?

Rax*_*van 6

std :: shared_ptr不是指针,它是一个封装指针的类.这就是为什么operator +不起作用的原因shared_ptr

如果你有一个常规指针(double* matrix),那么一切都会好的.您可以shared_ptr使用get()获取常规指针

这将您的代码更改为 *(matrix.get() + r*col + c) = 0.0;

一个等价的表达式 matrix.get()[r*col + c] = 0.0;

另一种存储数据的方法(如果你不想让它共享)就是使用std :: vector:

std::vector<double> matrix(row * col);
matrix[r * col + c] = 0.0;
Run Code Online (Sandbox Code Playgroud)

使用向量提供了一个优势,当你有一个调试版本时,operator []可以检查表达式是否r * col + c返回一个无效的索引(例如,如果r> = col)