2016-09-22 150 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