C – 将一个Vector附加到另一个,删除重复项?
发布时间:2020-12-16 10:18:44 所属栏目:百科 来源:网络整理
导读:我想将一个向量(vectorAlpha)附加到另一个向量(vectorBeta)的末尾.我能想到两种不同的方法,我想知道如何做每一种方法. 第一种方法是附加第二个向量并从新向量中删除所有重复项.另一种方法是单独在单个向量中留下重复项,但如果它们已经存在于vectorALpha中,则
我想将一个向量(vectorAlpha)附加到另一个向量(vectorBeta)的末尾.我能想到两种不同的方法,我想知道如何做每一种方法.
第一种方法是附加第二个向量并从新向量中删除所有重复项.另一种方法是单独在单个向量中留下重复项,但如果它们已经存在于vectorALpha中,则不会添加来自vectorBeta的任何项. 例如,如果向量是具有以下值的向量: vectorAlpha: First line of alpha An alpha line An alpha line Some line Alpha fifth line vectorBeta: Beta first line A beta line A beta line Some line Beta fifth line 我认为第一种方法会导致组合向量: First line of alpha An alpha line Some line Alpha fifth line Beta first line A beta line Beta fifth line 虽然第二种方法只是两个数组合并,但第二个向量中的’Some line’没有添加: First line of alpha An alpha line An alpha line Some line Alpha fifth line Beta first line A beta line A beta line Beta fifth line 这两个appraoches使用的C代码是什么? 解决方法
因为很明显
>你只想重复删除vecB中的条目(如果它们存在于vecA中,而不是一般的重复条目) 答案应该(显然?)是std :: remove_copy_if.这样称呼它: #include <vector> #include <algorithm> typedef std::vector<int> Vec; struct Contained { const Vec& _sequence; Contained(const Vec &vec) : _sequence(vec) {} bool operator()(int i) const { return _sequence.end() != std::find(_sequence.begin(),_sequence.end(),i); } }; int main() { Vec vecA; Vec vecB; std::remove_copy_if(vecB.begin(),vecB.end(),back_inserter(vecA),Contained(vecA)); } 您可能希望根据vecA的大小和性质优化谓词: #include <set> template <typename T> struct Contained { const std::set<T> _set; template <typename It> Contained(const It& begin,const It& end) : _set(begin,end) {} bool operator()(const T& i) const { return _set.end() != _set.find(i); } }; 哪个将用作Contained< int>(vecA.begin(),vecA.end()).完整代码is compiling on codepad.org 干杯 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |