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