最佳坐标容器

时间:2015-09-12 12:19:08

标签: c++ xlib

我正在尝试使用xlib从txt文件中获取坐标,我一直想知道用于此类努力的最佳容器是什么?我正在考虑多维数组,因为我的程序将使用三角形和最短路径算法我还想询问如何使用扫描函数最好地填充所述容器,计划是使用嵌套循环来填充它。

编辑:我计划使用的txt文件是使用xlib函数绘制的三角形坐标列表,然后通过在界面上放置点,找到从用户定义的点到另一个点的最短路径,三角形作为障碍物。

int main(int argc,char *argv[])
{
    int A,B;
    int Trig[A][B];
    FILE * pFile;
    // First need to scan the file. Need to check if there's a file to look into first.
    std::string pFilename = argv[1];
    if (pFilename == ""){
        cout << "Needs a Filename";
    }
    pFile = fopen(atoi(pFilename),"r");
    // scanf(pFile,"%1s (%d,%d) (%d,%d) (%d,%d)",);
return 0;
}

2 个答案:

答案 0 :(得分:1)

如果这些是2D坐标,std::pair将是一个很好的选择。

#include <utility>

int main()
{
  std::pair<int, int> intCoordinates(5, 3);

  std::cout << "x: " << intCoordinates.first;
  std::cout << "y: " << intCoordinates.second << "\n";

  // -- hocus pocus, array of pairs, use it as normal C array
  std::pair<int, int> arr[5];
}

当然你可以改变变量的类型 如果您愿意,可以<double, double>甚至<double, int>,这完全取决于您。

更多信息:http://www.cplusplus.com/reference/utility/pair/pair/

这个或任何其他情况中,Point struct可以完成这项工作:

struct Point {
  int x, y;
  Point(int a, int b) { this->x = a; this->y = b; }
};

int main()
{
   Point p(2,3);

   // ...
}

除非您向我们提供有关您的代码的更多信息,否则我们可能无法提供更多建议。

答案 1 :(得分:0)

我最近遇到了同样的问题,并找到了该帖子。我按照这里的建议开始使用结对,但最后并没有那么容易使用和维护,因此我用一些实用程序运算符创建了自己的Struct。

.hpp

struct Coordinates
{
    std::size_t x;
    std::size_t y;
    Coordinates(std::size_t x, std::size_t y);
    void add(std::size_t x, std::size_t y);

    Coordinates operator+=(const Coordinates &coordinate);
    Coordinates operator+(Coordinates coordinate);
};

.cpp

Coordinates::Coordinates(std::size_t x, std::size_t y) : x(x), y(y)
{
}

void Coordinates::add(std::size_t xAdd, std::size_t yAdd)
{
    x += xAdd;
    y += yAdd;
}

Coordinates Coordinates::operator+=(const Coordinates &coordinate)
{
    add(coordinate.x, coordinate.y);
    return *this;
}

Coordinates Coordinates::operator+(Coordinates coordinate)
{
    return coordinate += *this;
}

这是您可以做的:

Coordinates myPoint(4, 7);
myPoint += Coordinates(2, 3); // myPoint now contains x = 6 and y = 10

您还可以通过执行yourPoint.xyourPoint.y来访问字段x和y。

相关问题