【问题标题】:Writing a 2D vector to a file? c++将二维矢量写入文件? C++
【发布时间】: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 &lt;&lt; MapSizeVector[i][j];而不是MapSizeVector[sizeX][sizeY];吗?
  • 如果我这样做,我会得到矢量下标超出范围,它会删除 Map.txt 中的所有内容,然后只打印 [Map]
  • 我只是在设置矢量的大小。
  • 好的,但是你这样做 (sizeX + 1) * sizeY 次。这是没有意义的。您应该在循环之前初始化映射一次,然后在 for 循环中打印一个值。
  • 好的,谢谢。我没注意到。

标签: c++ file-io map vector sfml


【解决方案1】:

你的函数应该是这样的:

void Map::SetMapSize(int sizeX, int sizeY, const char *filename)
{
    std::ofstream out(filename);
    out << "[Map]" << std::endl;
    MapSizeVector.resize(sizeX);

    for(int i = 0; i < sizeX; i++)
    {
        MapSizeVector[i].resize(sizeY);
        for(int j = 0; j < sizeY; j++)
        {
            char str[20];
            sprintf(str, "%d ", MapSizeVector[i][j]);
            out << str;
        }
        out << '\n';
    }
}

【讨论】:

  • @user1816388 那些 for 循环条件确实(在编辑之前)被 1 溢出,错误的比较运算符...
  • @miloszmaki 您的代码缺少换行符,这是问题的示例输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2010-09-26
  • 1970-01-01
  • 2016-02-24
  • 2017-07-31
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多