gpt4 book ai didi

C++:矩阵类

转载 作者:行者123 更新时间:2023-11-28 03:06:51 29 4
gpt4 key购买 nike

有人(谢谢)为我发布了一个矩阵类构造,以便我可以动态调整它的大小。

我试图增强它,以便我可以获取和设置个人值。

class Matrix
{
public:
Matrix(std::size_t rows, std::size_t cols) : _matrix(rows, std::vector<float>(cols))
{
for (unsigned long r=0;r<rows+1;r++)
{
vector <float>nRow;

nRow.resize(cols+1);

for (unsigned long i=0;i<cols+1)
{
nRow[i]=0;//initialize to zero
}

_matrix.push_back(nRow);

}
}
// this is my own attempt to access the items:
float Value(unsigned long row,unsigned long col) : _matrix[row][col];

private:
std::vector<std::vector<float>> _matrix;
};

我想我可以像这样访问单个项目:

Matrix m(100,100);
m[5,5]=15;

但我猜是台词

float Value(unsigned long row,unsigned long col) : _matrix[row][col];

m[5,5]=15;

错了。他们不会编译出各种错误。

最佳答案

在此代码处:

float Value(unsigned long row,unsigned long col) : _matrix[row][col];

这不是有效的 C++ 声明。初始化列表仅对构造函数有效,但显然不是这种情况。

此外,您不能使用这种对象构造调用:m[5,5]。括号运算符必须只有一个参数。

为了解决您的问题,我建议您使用运算符重载operator()。它可以有任意数量的参数,因此,将您以前的函数替换为:

float& operator()(unsigned long row, unsigned long col)
{
return _matrix[row][col];
}

现在,您可以这样调用:

m(5, 5) = 15;
b = m(5,5);

缺点是您通过此运算符暴露了类的内部结构,这违反了封装原则。

关于C++:矩阵类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19455831/

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