无法携带对象以使C++正常工作

Cannot carry object to function properly C++

本文关键字:常工作 工作 C++ 对象      更新时间:2023-10-16

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

您按值传递参数,这意味着参数在传递给函数之前会被复制。

因此,方法内部的每个修改都只引用本地副本。尝试通过引用传递值,例如:

void UpdateTopK(cliques& C, vector<cliques>& minheap)
                       ^                   ^

请注意,const T&应该传递一个需要传递给函数而不进行复制和编辑的对象,以指定该对象。