您好我想用c ++制作一个坐标系。我将从用户那里获得一些(x,y)坐标并使用它我需要制作一个坐标系(更多的是地图)样式。我怎样才能做到这一点?它需要如下图所示。我应该使用2D数组或矢量吗?如何使循环以不同方式进行标记?
(2,0)(4,3)(7,8) 需要看起来像
**1************
***************
***************
***************
***1***********
***************
***************
********1******
这是我到目前为止所获得的代码,但问题是我无法在其中标记多个坐标。我只是用2个循环来做它
for(int i = -6; i < 7; i++)
if (i < 0)
cout<<" "<<i;
else
cout<<" "<<i;
cout<<endl;
for(int i = 0; i < 15; i++)
{
cout<<(char)(i + 49);
for(int j = -6; j < 7; j++)
if(i == y - 1 && j == x)
cout<<" x ";
else
cout<<" . ";
cout<<(char)(i + 49)<<endl;
}
请指教。谢谢!!
答案 0 :(得分:5)
我建议您使用vector<string>
或vector<vector<char> >
甚至vector<vector<string> >
,具体取决于您打算在单元格中存储的内容。如果单元格是单个字符,那么第一个选项可能是最好的。
之后创建地图非常简单:
int n,m;
cin >> n >> m;
vector<string> a(n, string(m, '*');
我不确定''是什么'。以及上面代码中的'x',但我为你留下的所有成像是输入几对坐标,并将vector<string>
中的相应元素替换为'1'。
希望这有帮助。
答案 1 :(得分:1)
我建议使用std::set
std::pair
代替std::vector
- 没有必要将整个网格保留在内存中,我们只需要点。
http://liveworkspace.org/code/f434521b804485f16786556762780448
答案 2 :(得分:0)
要回答您的其他问题,您可以使用循环进行更改,使用另一个循环显示结果。 使用izomorphius的建议,如果你使用一个列表来存储坐标对,它会是这样的:
vector<string> matrix ;
list<pair> PairList ;
for (list<pair>::const_iterator it = PairList.beguin(); i < PairList.end(); it++) {
matrix[ (*it).second ][ (*it).first ] = "." ;
}
并显示结果:
for (int i = 0; i < matrix.size; i++) {
cout << matrix[i] << endl ;
}