比较不同长度的向量c ++

时间:2016-10-24 00:40:17

标签: c++ vector

我正在开发Conway的生命游戏版本,其中用户可以以“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;
}

1 个答案:

答案 0 :(得分:0)

细胞分娩总是小于细胞规,所以你的方法是错误的。有很多方法可以给这只猫上皮,这里有一个:

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