如何设置由另一个变量指定的无限数量的变量

时间:2013-05-24 23:11:14

标签: c++ variables cnc indefinite

好吧,我知道这可能听起来令人困惑 - 我是一个关于编程理念的新人。 我有一个CNC项目,它将从文本文件中获取值,分配它们,并通过串行连接将它们传输到Arduino,它将接收和驱动电机,等等。

for( std::string line; getline( input, line ); ) 
{
int x, y;
input >> x >> y;
}

但是,我希望能够让程序处理任意长度的文本文件 - 任意数量的坐标。在界面中,我正在设计一个允许用户指定命令数的输入面板。但是,如何引入可以接受该命令数量并引入该数量变量的代码?我知道我可以通过创建每个1000的{​​{1}}变量和其他命令类型来强制执行此操作,并且最多可以进行X, Y, Z行处理,但是它会更有效率有代码实现这一点,并为我调整。

例如,假设我在文本输入框中输出了一个指定为1000的值。我如何告诉程序创建一些NumberOfCommands(以及其他串行)命令,其中该数字等于X-axis, Y-axis, and Z-axis

2 个答案:

答案 0 :(得分:3)

您可以使用std::vector类来存储任意数量的元素。

所以在你的情况下是这样的:

struct Coordinate {
    int x,y,z;
};

std::vector<Coordinate> coords;

for( std::string line; getline( input, line ); ) 
{
   Coordinate coord;
   input >> coord.x >> coord.y >> coord.z;
   coords.push_back(coord);
}

emplace_back

struct Coordinate {
    Coordinate(int x, int y, int z):x(x),y(y),z(z){ }
    int x,y,z;
};

std::vector<Coordinate> coords;
int x,y,z;    
for( std::string line; getline( input, line ); ) 
{
   input >> x >> y >> z;
   coords.emplace_back(x,y,z);
}

emplace_back不像push_back那样制作副本,它会创建元素并将其放入向量中。

答案 1 :(得分:0)

您可以使用动态调整大小的数组。

例如from here

int *myArray;           //Declare pointer to type of array
myArray = new int[x];   //use 'new' to create array of size x
myArray[3] = 10;        //Use as normal (static) array
...
delete [] myArrray;     //remember to free memory when finished.

问题是x来自哪里?您可以假设1000并在填充数组时保持计数。然后,如果您获得的信息大于该大小,则可以调整阵列大小。

或者你可以从一个实体开始,就像STL vector<int>

一样