0

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

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

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

比如说,我让那个文本输入框输出一个指定的值NumberOfCommands。我将如何告诉程序创建多个X-axis, Y-axis, and Z-axis(以及其他串行)命令,其中该数字等于NumberOfCommands

4

2 回答 2

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,它会创建元素并将其放入向量中。

于 2013-05-24T23:16:27.443 回答
0

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

例如从这里

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 并在填充数组时保持计数。然后,如果您获得的信息超过该大小,您可以调整数组的大小。

或者你可以从一个实体开始,比如 STLvector<int>

于 2013-05-24T23:17:33.197 回答