• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

C++等号右面的变量值被改变?

/*只需要看一处。在标2.的注释处,newNode是parent的引用。经过这一条语句,等号右面的值被改变,其右儿子的值从2变为3。很不理解。标1.的注释是进入注释2.的语句编译能通过,不过运行出错。我知道出错的原因,只不理解值被改变的原因。*/#include#includeusing namespace std;//19.10templateclass MinHeap{private:        int CurrentSize, MaxSize;        T*heapMin;public:        T&RemoveMin(T*&rt);        void Insert(T&newNode);        MinHeap(int num);        virtual ~MinHeap(){ if (MaxSize > 0)delete[]heapMin; };public:        void swap(int pos_x, int pos_y);        void siftDown(int pos);        void siftUp(int pos);        int getlson(int pos){                return pos * 2 + 1;        }        int getrson(int pos){                return pos * 2 + 2;        }        int getparent(int pos){                return (pos - 1) / 2;        }};templateMinHeap::MinHeap(int num){        if (num = 0 && heapMin[par] > heapMin[pos]){                swap(par, pos);                pos = par;        }}templatevoid MinHeap::Insert(T&newNode){        if (CurrentSize == MaxSize){                T*temp = new T[++MaxSize];                for (int i = 0; i < CurrentSize; i++){                        temp = heapMin;                }                temp[CurrentSize] = newNode;                delete[]heapMin;                heapMin = new T[MaxSize];                for (int i = 0; i < MaxSize; i++){                        heapMin = temp;                }                delete[]temp;                temp = NULL;                return;        }        else{                heapMin[CurrentSize] = newNode;  //断点进入这里,在刚进入函数时newNode值是被传进来的值,经过这一行后,newNode值被改变                                CurrentSize++;                siftUp(CurrentSize - 1);        }}templateT&MinHeap::RemoveMin(T*&rt){        swap(0, --CurrentSize);        siftDown(0);        rt = &heapMin[CurrentSize];        return heapMin[CurrentSize];}templateclass HuffmanTree;templateclass HuffmanTreeNode{        friend class HuffmanTree;private:        HuffmanTreeNode*leftchild, *rightchild, *parent;        T data;public:        HuffmanTreeNode*getLChild();        HuffmanTreeNode*getRChild();        HuffmanTreeNode*getParent();        bool operator < (HuffmanTreeNode&t){ return data < t.data; }        bool operator > (HuffmanTreeNode&t){ return data>t.data; }        HuffmanTreeNode();        T getData(){                return data;        }};templateHuffmanTreeNode::HuffmanTreeNode(){        leftchild = rightchild = parent = NULL;}templateHuffmanTreeNode* HuffmanTreeNode::getLChild(){        return leftchild;}templateHuffmanTreeNode* HuffmanTreeNode::getRChild(){        return rightchild;}templateHuffmanTreeNode*HuffmanTreeNode::getParent(){        return parent;}templateclass HuffmanTree{private:        HuffmanTreeNode*root;        void mergeTree(HuffmanTreeNode*&left, HuffmanTreeNode*&right, HuffmanTreeNode*&parent);        void deleteTree(HuffmanTreeNode*rt);public:        virtual ~HuffmanTree(){ deleteTree(root); }        HuffmanTree(T *weight, int num);        void preOrder(HuffmanTreeNode*rt){                if (rt == NULL)return;                cout data leftchild);                preOrder(rt->rightchild);        }        HuffmanTreeNode*getRoot(){                return root;        }};templateHuffmanTree::HuffmanTree(T *weight, int num){        root = NULL;        MinHeapheap(num);        HuffmanTreeNode*nodelist = new HuffmanTreeNode[num*3];        for (int i = 0; i < num; i++){                nodelist.data = weight;                nodelist.rightchild = nodelist.leftchild = nodelist.parent = NULL;                heap.Insert(nodelist);        }        HuffmanTreeNode*temp;        for (int i = 0; i < num - 1; i++){                HuffmanTreeNode*left = new HuffmanTreeNode;                HuffmanTreeNode*right = new HuffmanTreeNode;                HuffmanTreeNode*parent = new HuffmanTreeNode;                heap.RemoveMin(left);                heap.RemoveMin(right);                mergeTree(left, right, parent);                heap.Insert(*parent);  //1.断点进入这里                root = parent;                }        root;        delete[]nodelist;}templatevoid HuffmanTree::deleteTree(HuffmanTreeNode*rt){        if (rt == NULL)return;        deleteTree(rt->rightchild);        deleteTree(rt->leftchild);        delete rt;}templatevoid HuffmanTree::mergeTree(HuffmanTreeNode*&left, HuffmanTreeNode*&right, HuffmanTreeNode*&parent){        parent->parent = NULL;        parent->leftchild = left;        parent->rightchild = right;        parent->data = left->data + right->data;        (left->parent )= (right->parent) = parent;        }int main(){        int weight[3] = { 4, 2 };        HuffmanTreeheap(weight, 2);}

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!