如何为shared_ptr添加偏移量
How to add offset to shared_ptr?
我试图为我的矩阵类创建一个单一的内存板,因为std::vector<std::vector<double>>
没有提供我想要的性能。所以我决定使用单维数组。所以我想到使用shared_ptr的双。
声明变量:
std::shared_ptr<double> matrix;
为声明的共享指针分配内存,我这样做:
matrix = std::make_shared<double []> (row*col);
现在来访问元素,将值赋给矩阵中的特定位置:
*(matrix + r*col + c) = 0.0;
这给了我错误说
' error: no match for 'operator+'(操作数类型为'std::shared_ptr'和'size_t ')
我想我们可以使用+
指针。为什么它不允许我向指针添加标量值?
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>= col)
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 添加对共享ptr的引用会增加引用计数吗?