比较不同长度的向量

Comparing vectors of different length c++

本文关键字:向量 比较      更新时间:2023-10-16

我正在开发Conway's Game of Life的一个版本,在这个版本中,用户可以输入自己的细胞出生、死亡和生存规则,格式为" b# #/s# #"。为了实现这些规则,我使用基本的字符串解析将出生(B)规则和生存(S)规则移动到单独的向量中。然而,我在形成生存向量时遇到了麻烦。

原始细胞规则位于一个向量中,其内容与细胞生成向量进行比较。我遇到的问题是,当输入"B012345678/S183"等规则字符串时,由于一个向量比另一个向量长,因此没有添加生存向量的部分,从而导致空值和段错误的比较。

我的问题是:我可以做些什么来填充这些空值,或者有一种方法来传递这些空值?

// Extract cell birth rules from rules string
vector<char> cellBirth(vector<char> cellrules) {
int i = 0;
   vector<char> birthrule;
while (cellrules[i] != 'S') {
    birthrule.push_back(cellrules[i]);
    ++i;
}
return birthrule;
}

// Extract cell survival rules
vector<char> cellSurvive(vector<char> cellrules, vector<char> cellbirth) {
vector<char> surviverule;
long size = cellrules.size();
//cout << "Cellrule size: " << size << endl;
for (int i = 0; i < size; i++) {
    if (cellrules[i] != cellbirth[i]) {      //Comparison happens here
        surviverule.push_back(cellrules[i]);
    }
}
return surviverule;
}

cellbirth总是比cellrules小,所以你的方法是错误的。有很多方法可以剥掉这只猫的皮,这里有一个:

vector<char> cellSurvive(vector<char> cellrules) {
vector<char> surviverule;
bool pastS = false;
for (int i = 0; i < cellrules.size(); i++) {
  if (pastS)
    surviverule.push_back(cellrules[i]);
  else if (cellrules[i] == 'S')
    pastS = true;
}
return surviverule;
}