对向量中的多个向量使用std :: set_intersection

时间:2018-02-04 04:22:39

标签: c++ algorithm vector stl intersection

所以我正在研究我的C ++程序中的一个函数,我给它一个(未排序的)向量的向量。该函数的目标产生一个新的向量,其中包含任意两个向量之间的所有共同元素。

我以为我明白了如何去做,但看起来事情并不完全正确。我的方法是首先对所有向量进行排序(通过std::sort),然后使用std::set_intersection将每个向量相互比较并构建结果向量。代码编译很好,但是无论何时使用此函数,程序都会崩溃。最重要的是它似乎导致了一些内存泄漏。

这是我的代码:

#include <vector>
#include <algorithm>

std::vector<unsigned> findCommonIDs(std::vector<std::vector<unsigned> > allIDs)
{
    std::vector<unsigned> commonIDs;
    std::vector<std::vector<unsigned> >::iterator itVecVec;
    std::vector<std::vector<unsigned> >::iterator itVecVec1;
    for (itVecVec = allIDs.begin(); itVecVec != allIDs.end(); it++)
    {
        std::sort(itVecVec->begin(), itVecVec->end());
    }
    for (itVecVec = allIDs.begin(); itVecVec != allIDs.end(); it++)
    {
        for (itVecVec1 = std::next(itVecVec); itVecVec1 != allIDs.end(); it++)
        {
            std::set_intersection(itVecVec->begin(), itVecVec->end(), itVecVec1->begin(), itVecVec1->end(), std::next(commonIDs.begin(),commonIDs.size());
        }
    }
    return(commonIDs);
}

非常感谢任何帮助,谢谢:)

0 个答案:

没有答案