我试图为我的矩阵类创建一块内存,因为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;
这给我错误说
`错误:'运算符+'不匹配(操作数类型为'std :: shared_ptr'和'size_t')
我以为我们可以在指针上使用+
。为什么不让我为指针添加标量值?
答案 0 :(得分:6)
std::shared_ptr不是指针,它是一个封装指针的类。这就是operator +
无效shared_ptr
如果你有一个常规指针(double* matrix
)那么一切都会好的。您可以使用get()
shared_ptr
中获取常规指针
这会将您的代码更改为*(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;
使用向量在您进行调试构建时具有优势,operator []
可以检查表达式r * col + c
是否返回无效的索引(例如,如果r&gt; = col )