I have designed a quick and basic vector arithmetic library in C++. I call the program from the command line when I need a rapid cross product, or angle between vectors. I don't use Matlab or Octave or related, because the startup time is larger than the computation time. Again, this is for very basic operations.
I am extending this program, and I will make it work as an RPN calculator, for operations of the type:
1 2 3
4 5 6
x
out: -3 6 -3
(give one vector, another vector, and the "cross" operator; spit out the cross product)
The stack must accept 3d vectors or scalars, for operations like:
1 2 3
2
*
out: 2 4 6
The lexer and parser for this mini-calculator are trivial, but I cannot seem to think of a good way for creating the internal stack. How would you create a stack of for containing vectors or doubles (I rolled up my own very simple vector class - less than one hundred lines and it does everything I need).
How can I create a simple stack which accepts elements of class Vector or type double?
Thank you.
The simplest way would be just to create an Operand
struct that contains a double
for the scalar and a Vector
object for the vector:
struct Operand
{
double scalar_;
Vector vector_;
bool isVector_;
};
(you can set isVector_
to true if it is a vector operand, and false if it is a scalar operand)
For the actual stack, you can just use std::stack<Operand>
.
Other options include inheritance (creating scalar and vector types derived from an operand base type) or something like boost::variant
, but for something simple like this, a composition struct like the Operand
shown above is probably the easiest way to do it.