gpt4 book ai didi

c++ - 如何向 shared_ptr 添加偏移量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:43 26 4
gpt4 key购买 nike

因为 std::vector<std::vector<double>>,我正试图为我的矩阵类创建一 block 内存。没有提供我想要的性能。所以我决定使用单个一维数组。所以我想到了为此使用 double 的 shared_ptr 。

声明我做的变量:

std::shared_ptr<double> matrix;

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

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

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

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

这给了我错误的说法

`错误:'operator+' 不匹配(操作数类型为'std::shared_ptr' 和'size_t ')

我想我们可以使用 +在指针上。为什么它不允许我向指针添加标量值?

最佳答案

std::shared_ptr不是指针,是封装了指针的类。这就是 operator +shared_ptr

不起作用的原因

如果您有一个常规指针(double* 矩阵)那么一切都会好起来的。您可以使用 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;

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

关于c++ - 如何向 shared_ptr 添加偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40428854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com