所以假设我有两个不同的功能。一个是 BST 类的一部分,一个只是一个辅助函数,它将调用该类函数。我会在这里列出它们。
sieve(BST<T>* t, int n);
这个函数是这样调用的: sieve(t,n) 对象被称为 BST t;
我将在 sieve 函数中使用类 remove 函数来删除特定对象。我不确定这个基本功能的原型应该是什么样子?这样做:
sieve(BST<int> t, int n)
这里发生的一切都编译得很好,但是当调用 t.remove 函数时,我看不到实际结果。我假设是因为它只是创建一个副本或整个其他 t 对象,而不是从我的 main() 函数传递一个。
如果我在创建原始对象的主函数中调用删除函数 (t.remove(value)),它将正确删除所有内容。一旦我开始通过我的筛子功能进行操作,当我从我的主要功能中重新打印出来时,我看不到任何变化。所以我的主要功能看起来像这样:
int main ()
{
int n,
i,
len;
BST<int> t;
cin >> n;
vector<int> v(n);
srand(1);
for (i = 0; i < n; i++)
v[i] = rand() % n;
for (i = 0; i < n; i++)
t.insert(v[i]);
print_stat(t);
t.inOrder(print_data);
sieve(v,t,n);
print_stat(t);
t.inOrder(print_data);
return 0;
}
所以我的结果最终是一样的,即使我在函数中的调试语句显示它实际上是在删除一些东西。我猜我出错的地方是我如何将 t 对象传递给函数。