如何在c ++中有一组坐标的数组?

时间:2016-06-02 17:55:51

标签: c++ arrays

我正在尝试记录数组中的坐标。所以我想记录{{0,0},{0,1},{1,1}}之类的内容。我想过用空格分隔两个整数,并将整个事物作为一个字符串,所以(15 5)将不同于(1 55)。我认为它效率不高,使用字符串数组非常困难。

这是我到目前为止的(坏)代码:

#include <string>
#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    bool going=true;
    int x=0;
    int y=0;
    string coordinates[] = {};
    while (going==true){
        to_string(y)+","+to_string(x) >> coordinates;
        x++;
    }
    return 0;
}

我该使用什么?

3 个答案:

答案 0 :(得分:6)

制作struct Point { int x; int y; };

Point

然后你可以制作一个std::array<Point, 3> array = { { 0, 0 }, { 0, 1 }, { 1, 1 } }; s:

的数组
operator<<

您甚至可以重载operator>>//For output std::ostream& operator<<(std::ostream& os, const Point& p) { os << p.x << ", " << p.y << '\n'; return os; } //For input std::istream& operator>>(std::istream& is, Point& p) { is >> p.x >> p.y; return is; } 以方便输入/输出:

$("form").on("submit", function(e) { 
    e.preventDefault();

    var id_form = $(this).attr(id);
    var data = $(this).serialize();

    $.post(url, function(result) { });
});

答案 1 :(得分:2)

这是您需要使用类型系统来帮助您的(很多很多)案例之一。坐标是域中的一种对象,因此您可以创建Coordinate类:

class Coordinate {
public:
  int x, y;
};

Coordinate类是Coordinate对象的蓝图。您可以为每个坐标对创建该类的实例,并将其插入到数组中。

根据您是否事先知道坐标对的数量,您可能还想使用std::vector类,这类似于动态可调整大小的数组。然后你的代码变成:

#include <string>
#include <iostream>
#include <vector>
using namespace std;

class Coordinate {
public:
  int x, y;
};

int main(int argc, const char * argv[]) {
    bool going=true;
    int x=0;
    int y=0;
    vector<Coordinate> coordinates;
    while (going==true){
        Coordinate c { x, y };
        coordinates.push_back(c);
        x++;
        // Somehow break out of this loop
    }
    // coordinates contains all your { x, y } pairs
    return 0;
}

答案 2 :(得分:1)

1。结构

的向量
struct TwoDPoint
{
    int x, y;
};

std::vector< TwoDPoint > coordinates;

2. 结构/类别的载体

class Coordinates
{
     std::vector < int > x;
     std::vector < int > y;
public:
    ...
    insert( int x, int y ){}
};

3。

std::pair< int, int > coordinate;
std::vector< std::pair< int, int > > coordinates;

<强> 4

std::unordered_map< int, std::unordered_set< int > > coordinates;

It looks weird but could be useful if you have a lot of same x/y values (i.e. {1,1},{1,2},{1,3},{2,4})

5-6。分别用1,3 {和std::vector代替std::unordered_set

7+。如果您确实需要数组,请使用上述部分内容,但使用std::vector更改std::array。此外,您可以使用C数组,但您可能不应该使用。