我是矢量编程的新手,所以我的代码是错误的:
#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矢量。是否有更好的方法来推送变量?
答案 0 :(得分:0)
我立即注意到两个问题。导致崩溃的主要原因是您正在访问v
数组的边界之外。当i
为0且c
为-1时会发生这种情况,当i
为size-1
且c
为+1时也会发生这种情况(同样的事情发生)使用j
和d
)。
另一个问题是如何将alive
值保存到w
。由于您从w = v
开始,因此您拥有所需的所有元素。只需将其替换为w[i][j] = 0
即可。 (您还希望将该条件块移到c
循环之外。)