所以我尝试使用向量在 C++ 中实现集合,但在交集方面遇到了麻烦。我认为求交集的最快方法是寻找相同的元素,并将其推入一个新的向量,最后用新的向量替换原始集合。
class SET {
public:
vector<int> set;
void intersection(SET set2) {
auto i = set.begin(), j = set2.set.begin();
vector<int> retset;
while (i != set.end() && j != set2.set.end()) {
while (*i != *j) {
if (*i < *j) {
i++;
} else {
j++;
}
}
retset.push_back(*i);
i++; j++;
}
set = retset;
}
调试显示问题是 *i 和/或 *j 处的访问错误。这里有什么问题,解决方法是什么? 我可以在最后一步简单地做
set = retset
吗?
我还尝试使用使用整数的简单引用运算符,但这给了我同样的错误。
我正在尝试跑步的输入:
int temp1[5] = {0, 2, 4, 6, 8};
int temp2[6] = {0, 3, 4, 9, 10, 11};
SET set1 = SET(temp1, 5);
SET set2 = SET(temp2, 6);
set1.intersection(set2);
for (vector<int>::iterator i = set1.set.begin(); i !=set1.set.end(); i++)
cout << *i << " ";