如何使函数不改变指针形式的参数一旦完成


void insert_node(Node *p){
    Node *tmp;
    tmp = new Node;
    tmp = p;
    if(first == NULL){
        status ++;
        tmp->next = NULL;
        first = tmp;
    }
    else{
        status ++;
        tmp->next = first;
        first = tmp;
    }
}

void Resize_content(){
    if( status2 >= 7*space/10){
        Entry *tmp;
        tmp = new Entry[2*space];
        for(int i=0;i<space;i++){
            Node *paux;
            paux = content[i].first;
            while(paux){
                //Node &caux = *paux;
                tmp[paux->hash_index%(2*space)].insert_node(paux);
                paux = paux ->next;
            }
        }
        delete[] content;
        content = new Entry[2*space];
        content = tmp;
        space = 2*space;
    }
}

content是一个大小为space的向量列表。一旦元素的数量超过空间的70%,就必须将元素移动到不同的位置。问题是元素形成相同的列表,因为在insert_node之后的pax ->next变为NULL并且没有移动

如果我正确理解了你的意图,这应该是解决方案:

void insert_node(Node *p){
    if(first == NULL){
        status ++;
        //make p the start of a new 1-member list
        p->next = NULL;
        first = p;
    }
    else{
        status ++;
        // prepend p to existing list
        p->next = first;
        first = p;
    }
}

void Resize_content(){
    if( status2 >= 7*space/10){
        Entry *tmp;
        tmp = new Entry[2*space];
        for(int i=0;i<space;i++){
            Node *paux;
            paux = content[i].first;
            while(paux){
                Node *caux = paux;  //store current node's address
                paux = paux ->next;  // remember next node to process
                tmp[paux->hash_index%(2*space)].insert_node(caux);  //move current node
            }
        }
        delete[] content;
        content = tmp;
        space = 2*space;
    }
}

是否有一个特殊的原因,为什么你这样做,而不是使用std::vector, std::list(或std::forward_list)和/或std::unordered_map(为整个哈希)?

相关内容

  • 没有找到相关文章

最新更新