gpt4 book ai didi

时间:2019-03-08 标签:c++set_unioniterator

转载 作者:太空狗 更新时间:2023-10-29 20:28:31 28 4
gpt4 key购买 nike

我在使用这段代码时遇到了一些问题,代码正在编译,但是当我尝试测试 vector 的内容时,测试失败了。这是代码:

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));

当我运行这些测试时,第一个测试通过,但第二个测试返回 vector 中数字 1 的 0 个实例,其中答案应该是 1 个实例。

最佳答案

问题是 std::set_union 需要对输入数据进行排序,而您的 v1 不是。

编辑:如评论中所述,您不应该预先确定 vector 的大小,因为它会以一堆 0 结束,除非您在 union 结果中恰好有 20 个项目。相反,像这样的东西怎么样(我更改了名称以使其更具描述性,并在调用中进行了忍者编辑以根据评论保留最小大小限制):

template <typename T>
std::vector<T> vector_union(const std::vector<T>& v1, const std::vector<T>& v2)
{
vector<T> v;
v.reserve(std::max(v1.size(), v2.size());

set_union (v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v));

return v;
}

如果需要,您甚至可以在调用 set_union 之前对 vector 进行这种排序,但这会导致对预先排序的输入进行不必要的工作。

关于时间:2019-03-08 标签:c++set_unioniterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861304/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com