2016-09-22 96 views
0

我很难发现我的代码有什么问题 - 起初我以为我完成了,但后来发现了一些问题。我创建了一个名为bagIntersection的函数,该函数使用两个袋子对象并在两者中找到常用项目,然后将它们放入一个新袋子中:查找两个阵列的交叉点

例如,如果袋子包含项目{“b”,“b”,“c “}和BAG2有项目{” b “b”, “d”, “E”},函数调用:

ArrayBag<std::string> resultBag = bag.bagIntersection(bag2); 

只应在resultBag返回字符串 “b” 我的功能bagIntersection是返回{ “b”, “b”}到resultBag,所以某种程度上我得到的 “b” 的倍数。

(代码中删除)的代码是正确的。

+1

解决此类问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –

+0

这是一种练习吗?我认为你可以通过使用例如'std :: set'来解决它更容易 – user463035818

+4

我看不出有什么问题。 “{”b“,”b“,”c“}和'{”b“,b”,“d”,“e”}'*的交集是*'{“b”,“b”} '。 – Nelfeal

回答

1

如果你想删除重复的,你可以例如做这样一个矢量容器:

std::sort(v.begin(), v.end()); 
v.erase(std::unique(v.begin(), v.end()), v.end()); 

,你将有只有一个“B”。

+0

你可以扩展OP的原始问题:找到一组交集,例如使用'std :: set_intersection'。 – BeyelerStudios

+0

谢谢,我不知道这个功能,它是一个强大的功能。 – doudouremi