我在閱讀有關set_intersection
,它似乎預計用戶提前分配正確的空間量(或更多),但並不奇怪?在C++中,您經常使用std::vector
,它在旅途中動態分配空間。爲什麼set_intersection
隱式需要預先分配空間,因爲根據結果數據大小(動態地)分配明顯更有效?交通規模預先已知時,是否希望最大限度提高性能?交叉點大小未知的常見情況如何?使用set_intersection進行動態分配?
是否有任何「神奇的方式」直接分配每個元素添加到矢量一個插槽?
我在閱讀有關set_intersection
,它似乎預計用戶提前分配正確的空間量(或更多),但並不奇怪?在C++中,您經常使用std::vector
,它在旅途中動態分配空間。爲什麼set_intersection
隱式需要預先分配空間,因爲根據結果數據大小(動態地)分配明顯更有效?交通規模預先已知時,是否希望最大限度提高性能?交叉點大小未知的常見情況如何?使用set_intersection進行動態分配?
是否有任何「神奇的方式」直接分配每個元素添加到矢量一個插槽?
,它似乎希望用戶預先分配的空間(或更多)的正確量
不,不(除非我誤解你問):
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
//vectors to intersect
std::vector<int> first{1,2,4,3,8,6,7,5};
std::vector<int> second{3,15,4,16,36};
//they need to be sorted
std::sort(first.begin(), first.end()); //{1,2,3,4,5,6,7,8}
std::sort(second.begin(), second.end()); //{3,4,15,16,36}
//intersection result
std::vector<int> intersection;
//intersecting
std::set_intersection(first.begin(), first.end(),
second.begin(), second.end(),
std::back_inserter(intersection));
//output: 3,4
for(int n : intersection)
std::cout << n << ",";
}
謝謝!非常有用:D'back_inserter'就是所需要的。 – zehelvion
我想實際的問題是'什麼是OutputIterator,我如何使用set_intersection'。 – pmr
@pmr 是的,我知道'OutputIterator'是這個解決方案中有意義的項目。我會說這個問題指向這個問題,但不需要知道'OutputIterator'的特定性。 – zehelvion