写入2D矢量,正在崩溃我的程序

时间:2017-10-18 04:00:33

标签: c++

我是矢量编程的新手,所以我的代码是错误的:

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main()
{
    std::ifstream in("input.txt");
    std::vector<std::vector<int> > v, w;

    if (in) {
        std::string line;

        while (std::getline(in, line)) {
            v.push_back(std::vector<int>());

            for(int x=0; x<line.size(); x++){
                v.back().push_back((int)line[x] - (int)'0');
            }
        }
    }

    for (int i = 0; i < v.size(); i++) {
        for (int j = 0; j < v[i].size(); j++)
            std::cout << v[i][j] << ' ';

        std::cout << '\n';
    }

    int size = v.size(); //because its a square matrix
    w = v; //w is our temp vector for storing new values;
    int alive =0;
    int z=0;
    for (int i=0;i<size;i++)
    {
        for (int j=0;j<size; j++)
        {
            alive = 0;
            for(int c = -1;c<2; c++)
            {
                for(int d = -1; d<2 ; d++)
                {
                    if(!(c==0 && d == 0))
                    {
                        z = v[i+c][j+d];
                        if(z)
                            ++alive;
                    }
                }

                if(alive<2) w[i].push_back(0);
                else if(alive == 3) w[i].push_back(1);
                else w[i].push_back(0);
            }
        } 
    }
    return 0;
}

我认为我将值分配给我的第二个变量是错误的。我的程序从输入文件中读取:

1010101
0101010
1010101

并且是在分析其邻居(生命游戏问题)之后写入第二个向量w,我想我应该使用w.push_back()但是我不确定语法是什么2D矢量。是否有更好的方法来推送变量?

1 个答案:

答案 0 :(得分:0)

我立即注意到两个问题。导致崩溃的主要原因是您正在访问v数组的边界之外。当i为0且c为-1时会发生这种情况,当isize-1c为+1时也会发生这种情况(同样的事情发生)使用jd)。

另一个问题是如何将alive值保存到w。由于您从w = v开始,因此您拥有所需的所有元素。只需将其替换为w[i][j] = 0即可。 (您还希望将该条件块移到c循环之外。)