cliques是我的类对象。当我在main中使用它们时,我的所有类命令都有效,但出于某种原因,我不能通过我的函数对堆或堆栈进行更改。我尝试在我的函数参数上使用参考标记,但我仍然有问题。也许我错误地完成了引用。有没有人有任何想法我可能做错了什么?
这是我的职责之一:
void UpdateTopK(cliques C, vector<cliques> minheap) {
if (C.getclique_size() < CliqueSize) {
return;
}
else if (minheap.size() < Solutions) {
minheap.push_back(C);
push_heap(minheap.begin(), minheap.end(), min_iterator());
}
else if (minheap.size() == Solutions and C.getMaxclique_prob() > minheap.front().getMaxclique_prob()) {
pop_heap(minheap.begin(), minheap.end(), min_iterator());
minheap.pop_back();
minheap.push_back(C);
push_heap(minheap.begin(), minheap.end(), min_iterator());
}
这是我主要的一部分:
stack <cliques> cstack;
vector<cliques> max_heap;
make_heap(max_heap.begin(), max_heap.end(), max_iterator());
vector<cliques> min_heap;
make_heap(min_heap.begin(), min_heap.end(), min_iterator());
for (int i = 0; i < 5; i++) {
cliques temp(i);
cstack.push(temp);
}
while (!cstack.empty()) {
cliques temp = cstack.top();
cstack.pop();
bool pruned = GenerateChildren(temp, min_heap, max_heap, cstack, graph);
if (!pruned) {
UpdateTopK(temp, min_heap);
}
}
答案 0 :(得分:0)
您正在按值传递参数,这意味着参数在传递给函数之前被复制。
因此,方法内的每个修改都只引用本地副本。尝试通过引用传递值,例如:
void UpdateTopK(cliques& C, vector<cliques>& minheap)
^ ^
请注意,需要传递给没有副本且未经编辑的函数的对象应由const T&
传递以指定此对象。