加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

多种数据类型的C堆栈(RPN矢量计算器)

发布时间:2020-12-16 09:27:53 所属栏目:百科 来源:网络整理
导读:我用C设计了一个快速基本的矢量运算库.当我需要快速交叉乘积或向量之间的角度时,我从命令行调用程序.我不使用Matlab或Octave或相关,因为启动时间大于计算时间.同样,这是非常基本的操作. 我正在扩展这个程序,我将使它作为RPN计算器工作,用于以下类型的操作:
我用C设计了一个快速基本的矢量运算库.当我需要快速交叉乘积或向量之间的角度时,我从命令行调用程序.我不使用Matlab或Octave或相关,因为启动时间大于计算时间.同样,这是非常基本的操作.

我正在扩展这个程序,我将使它作为RPN计算器工作,用于以下类型的操作:

1 2 3
4 5 6
x
out: -3 6 -3

(给出一个向量,另一个向量和“交叉”运算符;吐出十字产品)

堆栈必须接受3d向量或标量,用于以下操作:

1 2 3
2
*
out: 2 4 6

这个迷你计算器的词法分析器和解析器是微不足道的,但我似乎无法想到创建内部堆栈的好方法.你将如何创建一个包含向量或双精度的堆栈(我卷起了我自己非常简单的向量类 – 少于一百行,它完成了我需要的一切).

如何创建一个接受Vector类或double类型元素的简单堆栈?

谢谢.

解决方法

最简单的方法是创建一个Operand结构,其中包含标量的double和Vector的Vector对象:

struct Operand
{
    double scalar_;
    Vector vector_;
    bool isVector_;
};

(如果是矢量操作数,可以将isVector_设置为true,如果是标量操作数,则设置为false)

对于实际堆栈,您可以使用std :: stack< Operand>.

其他选项包括继承(创建从操作数基类型派生的标量和向量类型)或类似boost :: variant的东西,但对于像这样简单的东西,像上面显示的操作数这样的组合结构可能是最简单的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读