我知道这听起来很有趣但我只是想知道。
通常我们定义2x2
矩阵,它将采用
A[1][1], A[1][2], A[2][1],A[2][2]
我们能够写出一个矩阵,矩阵中每个元素的差异为0.5吗?如何在c ++中编写简单代码?因为我正在与雅各比人打交道。
A[1][1] A[1][3/2] A[1][2]
A[3/2][1] A[3/2][3/2] A[3/2][2]
A[2][1] A[2][3/2] A[2][2]
答案 0 :(得分:0)
作为可能的解决方案,您应该使用优选的数组索引步骤定义自己的C ++类,并重载[]运算符。
[更新]这是这类课程的原始示例:
class MyArray{
private :
int* pA;
unsigned int n;
float m_step;
public:
MyArray(unsigned int n, float step ): pA( new int[n] ), n(n), m_step(step){}
~MyArray(){ delete [] pA, n = 0 ;}
void populate(int p) {
for (unsigned int i = 0; i < n ; i++) {
pA[i] = p;
p++;
}
}
int& operator[](float i){ /** Calculate correct internal array index based on input i and specified m_step. Return array element value by calculated index */ }
const int& operator[](float i)const{ /** Calculate correct internal array index based on input i and specified m_step. Return array element value by calculated index */ }
unsigned int size(){ return n;}
unsigned int size()const { return n;}
};
答案 1 :(得分:0)
简单的答案是否定的。在最低级别,索引是 相对于数组开头的偏移量,对应于 内存中的物理地址,物理地址总是如此 基数。
更一般的答案是你可以使用任何类型
可以订购,或支持相等和兼容
将哈希作为索引,只需使用std::map
或std::unordered_map
而不是std::vector
。粗略地说:
std::map<double, std::map<double>> A;
您的案例中的问题是您使用密钥的类型。
由于涉及舍入的问题,double
不
建议作为关键。 std::ratio
可能具有适应性;除此以外,
你必须自己弄清楚一些事情。如果你很漂亮
确保这些值都非常接近于
整数,或非常接近以.5
结尾的东西,并且
价值会相当小,你可能会侥幸逃脱
特别订购:
struct Order
{
bool operator()( double lhs, double rhs ) const
{
static double const epsilon = 0.25;
double l;
modf( 2 * lhs + epsilon, &l );
double r;
modf( 2 * rhs + expsilon, &r );
return l < r;
}
};
(这假设所有指数都是非负数。)但是,此时,您也可以创建自己的指数。
矩阵,使用上面的l
和r
作为物理索引。
请注意,在C ++中,3/2
为1
,而非1.5
。