如何在c ++中读取文件中的坐标

时间:2016-03-03 01:57:47

标签: c++ arrays oop file-read

我有一个包含机器人坐标的文件,其中包含机器人的X,Y和旋转度。

0.2 0.3 150
1.7 3.2 -30
.....
8.7 5.2 -120

我还有一个文件,其中包含来自机器人传感器的不同读数,看起来像

1.5 1.4 1.0. 1.5
4.5 3.4 8.3. 1.1
....
3.5 7.3 1.2. 12.5

首先,我读取机器人的坐标,然后读取其传感器值并进行一些计算。有没有必要为机器人姿势创建一个可以保留变量的类?

double x,y; int degrees;

因为更容易制作一个double [linesInFile] [3]数组,它将所有值保持为double类型,以创建位置类并创建位置对象数组。 如果我不知道文件中有多少坐标,并且在读完整个文件之前我不知道数组的大小,那么创建该数组的最佳方法是什么?它们可以添加动态,还是应该首先读取文件中有多少行然后创建新数组?

4 个答案:

答案 0 :(得分:1)

使用存储在std :: vector中的结构。

   struct Coord {
     double x;
     double y;
     double deg;
   };

   std::vector<Coord> myCoords;

现在您可以使用push_back添加元素。 std :: vector将为您处理内存管理。

答案 1 :(得分:1)

是的,你可以创建一个类。

如果您事先不知道数组的大小,只需使用std::vector,并在从文件中读取信息时将每个元素添加到向量中。

读取文件两次,一次确定行数,第二次是真实的,就是这样......上个世纪,当我们所有人都是C.幸运的是,我们现在有了C ++,{{1}和许多其他强大的类和模板,使得完全没有必要经历这样的麻烦。

答案 2 :(得分:0)

您可以使用<input type="text" onfocus="if(this.value == 'search') {this.value=''}" onblur="if(this.value == ''){this.value ='search'}"> 和重载的std::cin阅读。这取决于你的代码,但最简单的方法是创建一个包含必要变量的简单结构。

对于动态分配的数组,请使用operator >>。它是一个模板容器,可以与您的结构一起使用。

std::vector

答案 3 :(得分:0)

如果你不想让它变得动态,只需阅读文件并记录行数。

动态,使用对象矢量。创建一个

struct Movement {
  double x,y;
  int degrees;
};

在以下内容中使用它:

vector<Movement> myMovement;

然后你可以将每一行添加为Movement的对象。