所以我正在研究我的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);
}
非常感谢任何帮助,谢谢:)