我有這個代碼的一些問題,代碼編譯,但是當我嘗試測試向量的內容時,測試失敗。下面是代碼:C++ set_union迭代
using std::vector;
// returns a different vector, containing all elements in v1 and all elements in v2 (elements who are either in v1 or v2) but no duplicates.
template <typename T> vector<T> set_union(const vector<T>& v1, const vector<T>&v2)
{
vector<T> v(20);
typename vector<T>::iterator it;
it = set_union (v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
return v;
}
,這裏是我運行測試:
TEST_F(MyTest,set_union) {
vector<int> v1{1,3,2};
vector<int> v2{1,4};
vector<int> v=set_union(v1,v2);
ASSERT_EQ(0,count(v,9));
ASSERT_EQ(1,count(v,1));
ASSERT_EQ(1,count(v,2));
ASSERT_EQ(1,count(v,3));
ASSERT_EQ(1,count(v,4));
}
當我運行這些測試,第一次測試通過,但第二個測試返回0向量中數字1的實例,其中答案應該是1個實例。
你不應該使用矢量與結果的預定義的大小:使用'的std :: back_inserter(V)'代替。如果你對結果的大小有一個很好的估計,你可能想'v.reserve()'。 –
@DietmarKühl:在輸出尺寸的下限和上限是已知的('MAX(v1.size(),v2.size())'和'v1.size()+ v2.size()',分別地)。 –