无法携带对象正常运行C ++

时间:2015-12-22 01:57:21

标签: c++ class object reference heap

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

1 个答案:

答案 0 :(得分:0)

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

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

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

请注意,需要传递给没有副本且未经编辑的函数的对象应由const T&传递以指定此对象。