我正在尝试记录数组中的坐标。所以我想记录{{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;
}
我该使用什么?
答案 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数组,但您可能不应该使用。