我试图为我的矩阵类创建一块内存,因为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')
我以为我们可以使用+指针.为什么不让我为指针添加标量值?
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)
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |