gpt4 book ai didi

c++ - 从对象返回函数c++返回一个新对象

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:00 24 4
gpt4 key购买 nike

我正在开发一个程序,根据集合论,这两个集合由 2 个对象表示。每个对象可以包含 0 个或多个元素。功能是给定的,只能在里面实现才能改变。

在我的代码中,我检查调用对象和第二个对象 (otherIntSet) 是否为空,如果是,则它们在空集处相交。如果它们包含任何元素,我将检查 data[] 中的元素是否包含在 otherIntSet 中。我使用“return IntSet();”但我得到的只是空集。

IntSet IntSet::intersect(const IntSet& otherIntSet) const
{
if ( (this->isEmpty() ) && (otherIntSet.isEmpty() ) )
{

return IntSet();
}
else
{
for (int i = 0; i < used; ++i)
{
if (otherIntSet.contains(data[i]) )
{
IntSet().add(data[i]);
cout << IntSet();
}
}

}

我不确定如何返回正确创建的新对象,以便实际保存添加到其中的元素。谢谢

最佳答案

在这个循环中:

for (int i = 0; i < used; ++i)
{
if (otherIntSet.contains(data[i]) )
{
IntSet().add(data[i]);
cout << IntSet();
}
}

您在每次迭代中都创建了一个临时的 IntSet 对象,然后呢?消失?那么有什么意义呢?相反,您想要的是拥有一个对象,将其填满并返回:

IntSet result;
for (int i = 0; i < used; ++i)
{
if (otherIntSet.contains(data[i]) )
{
result.add(data[i]);
}
}
return result;

顺便说一句,您的第一个条件可能应该是“或”,它比“和”更好(更广泛):

if ( (this->isEmpty() ) || (otherIntSet.isEmpty() ) )

你可以尝试一下,甚至可以得到这样的结果:

IntSet IntSet::intersect(const IntSet& otherIntSet) const
{
IntSet result;
if (!otherIntSet.isEmpty()) // <-- note negation
{
// We don't need to check if this->isEmpty(), the loop
// won't loop anyway if it is. And in case it isn't
// it saves us unnecessary call. Assuming that "isEmpty()"
// is derived from "used".
for (int i = 0; i < used; ++i)
{
if (otherIntSet.contains(data[i]) )
{
result.add(data[i]);
}
}
}
return result;
}

关于c++ - 从对象返回函数c++返回一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57845008/

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