要获得两个排序范围的交集,
std::set_intersection可以使用:
std::vector<int> intersection (const std::vector<std::vector<int>> &vecs) { auto last_intersection = vecs[0]; std::vector<int> curr_intersection; for (std::size_t i = 1; i < vecs.size(); ++i) { std::set_intersection(last_intersection.begin(), last_intersection.end(), vecs[i].begin(), vecs[i].end(), std::back_inserter(curr_intersection)); std::swap(last_intersection, curr_intersection); curr_intersection.clear(); } return last_intersection;}这看起来比您的解决方案干净得多,而解决方案过于混乱,无法检查正确性。它还具有最佳的复杂性。
标准库算法
set_intersection可以通过使用
最多2·(N1 + N2-1)个比较,其中N1 = std :: distance(first1,last1)和N2 = std ::
distance(first2,last2)。
first1等是定义输入范围的迭代器。如果标准库是开源的(例如libstd 或libc ),则可以在标准库的源代码中检查实际的实现。



