我在解决一个编程问题,它想要找出两个集合之间的对称差。我用STL的set_symmetric_difference解决了这个问题。我得到了两个vector<int>s,A和B
A= {342,654,897,312,76,23,78} B= {21,43,87,98,23,756,897,234,645,876,123}
应返回(正确答案):
{ 21,43,76,78,87,98,123,234,312,342,645,654,756,876 }
但我明白:
{ 21,43,76,78,87,98,123,234,312,342,645,65,756,876}
有什么问题吗?这是我的代码:
sort(A.begin(), A.end());
sort(B.begin(), B.end());
// allocate the smallest size of A,B as maximum size
vector<int> c(A.size() < B.size() ? B.size() : A.size());
vector<int>::iterator i;
i = set_symmetric_difference(A.begin(), A.end(), B.begin(), B.end(), c.begin());
return vector<int>(c.begin(), i);注意:我得到了其他示例的正确答案。这个例子只给了我一个错误的答案。
我已经在Visual中测试过它,并得到了一条错误消息:"Iterator不能增量“
发布于 2012-07-07 09:09:01
问题在于向量c的初始化。逻辑稍有错误,因为输出范围的最大大小可能与两个输入范围的总和一样大。由于事先不知道大小,所以最好从一个空的输出向量开始,然后使用push_back和一个插入器:
sort(A.begin(), A.end());
sort(B.begin(), B.end());
std::vector<int> c;
set_symmetric_difference(A.begin(), A.end(),
B.begin(), B.end(), std::back_inserter(c));
return c;这会产生
21 43 76 78 87 98 123 234 312 342 645 654 756 876
发布于 2012-07-07 09:10:47
当我运行您的代码时,我从向量迭代器得到一个异常,不能增量。我认为问题就在这里:
vector c(A.size() < B.size() ? B.size() : A.size());
我把它改成:
vector c(A.size() + B.size());
毫无例外地运行它。我也得到了与你写的相同的数字(正确的数字)。
https://stackoverflow.com/questions/11373583
复制相似问题