C++ 写2D vector会毁了我的程序

C++ 写2D vector会毁了我的程序,c++,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;

我是矢量编程新手,所以我的代码有缺陷:

#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;
}

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

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


另一个问题是如何将
alive
值保存到
w
中。由于从
w=v
开始,您就拥有了所需的所有元素。只需将它们替换为,例如,
w[i][j]=0
。(您还需要将该条件块移到
c
循环之外。)

z=v[i+c][j+d]--将其更改为
z=v.at(i+c)。at(j+d)--然后诊断正在抛出的
std::out\u of \u range
异常。
1010101
0101010
1010101