好吧,我知道这可能听起来令人困惑 - 我是一个关于编程理念的新人。 我有一个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
?
答案 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>