【发布时间】:2016-02-04 04:19:47
【问题描述】:
我正在用 C++ 编写一个 Set 类(我知道已经有一个库,这是一个赋值),类似于 C++ 中的那个,我正在编写一个函数来检查输入的条目是否已经在集合中
void Set::insert(const Set::value_type& entry)
{
for (int i=0; i<used;i++)
{
if(data[i]!=entry && used<CAPACITY)
{
data[used] = entry;
used++;
}
else
{
throw "Out of capacity in Set and Intger already in Set";
}
}
}
该函数的作用是查看数字是否在集合中。如果号码不在集合中并且如果使用
【问题讨论】:
-
如果您的集合中没有条目,则由于您的 if 语句,您正在添加条目使用次数。但是你使用的增长,所以你的循环被卡住了,它无法摆脱它。
-
请提供Minimal, Complete, and Verifiable example。
data似乎是一个成员变量,used也是如此,所以我们猜测其中大部分是如何工作的。提供可以复制/粘贴到编译器中的示例,或使用an online C++ compiler 发布和分享您的代码,以便我们提供有意义的答案。 -
@OlzhasZhumabek 这是假设
used每次迭代都会自动更新。如果 OP 陷入无限循环,那么通过代码中的简单日志语句应该很容易诊断。 -
如果条目不在集合中,您的循环不会测试。它只是测试集合中的任何元素是否与条目不同。要检查它是否不在集合中,您必须检查所有使用过的条目,看看是否永远找不到它。
-
我注意到了这些问题,但使它成为 noop 的问题是它循环到
used,最初为 0,因此外部循环根本不会运行,除非填充了Set其他方式。循环内的所有错误逻辑永远不会出错。
标签: c++ arrays if-statement for-loop set