比较不同长度的向量
Comparing vectors of different length c++
我正在开发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;
}
相关文章:
- C++ 如何比较n个排序的整数向量以找到互元素?
- C++ 向量与用户定义的类比较?(==, <, >)
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 在C++中比较来自向量的字符串时出现分段错误
- 如何比较C++中不同大小的向量
- 如何比较C++中向量的元素?
- 比较向量中的元素时所花费的时间呈指数级增长
- 对没有比较器或λ函数的向量进行排序?
- 用字符串 c++ 比较对向量的元素
- 如何获得比较两个向量对的子集
- 尝试使用比较运算符对对象向量进行排序
- 为什么与<运算符的向量比较会比较每个项目两次?
- 如何在 CUDA 中(有效地)将大量向量相互比较
- 将向量元素与字符串元素进行比较,而不初始化向量
- 为什么我无法比较自定义类类型的两个向量?
- 通过块比较两个向量时,如何避免重复
- C++ 比较 2 个不同向量的元素
- 为什么<wstring>使用自定义 wcscmp 和 wmemcmp 比较器对向量进行排序比默认快得多?
- 与字符串的向量比较