【发布时间】:2012-12-14 10:59:46
【问题描述】:
我想知道如何将二维向量输出到值之间有空格的文件。它是以用户选择的指定大小将映射写入文件。我已经从那里动态加载地图。我有一个函数的基础,但接下来我有点迷失了。
void Map::SetMapSize(int sizeX, int sizeY, const char *filename)
{
std::ofstream out(filename);
out << "[Map]" << std::endl;
MapSizeVector[sizeX][sizeY];
for(int i = 0; i <= sizeX; i++)
{
for(int j = 0; j <= sizeY; j++)
{
std::ostream_iterator<std::string> output_iterator(out, " ");
}
}
}
Map.txt 如下所示:
[Map]
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0
0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0
0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0
0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0
0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0
0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0
0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0
0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
它下面还有一个细节。基本上,我想将该 [Map] 部分重写为用户在 [Details] 上方请求的任何大小 x 和 y 并替换现有的 [Map] 部分。数字为 0 很好。谢谢!
Map.h中向量的声明
std::vector <std::vector <int> > MapSizeVector;
【问题讨论】:
-
不应该是
out << MapSizeVector[i][j];而不是MapSizeVector[sizeX][sizeY];吗? -
如果我这样做,我会得到矢量下标超出范围,它会删除 Map.txt 中的所有内容,然后只打印 [Map]
-
我只是在设置矢量的大小。
-
好的,但是你这样做 (sizeX + 1) * sizeY 次。这是没有意义的。您应该在循环之前初始化映射一次,然后在 for 循环中打印一个值。
-
好的,谢谢。我没注意到。
标签: c++ file-io map vector sfml