deque使用出了有关问题~编译通过,但是不能访问
deque使用出了问题~编译通过,但是不能访问
这是我写的一个关于霍夫曼树的类,构造函数用来建树加预存编码,声明了的char型deque却无法访问,请各位高手帮忙分析一下解决办法。
-------------------------------
HfmTree.h
-------------------------------
#include <iostream>
#include <deque>
#include <vector>
namespace HTree
{
enum Henum
{
WeightArrNum = 2^8,
MaxWeight = 0xffff
};
}
class HfmTree
{
public:
explicit HfmTree(const int leaf, const int weightArr[]);
virtual ~HfmTree(void);
private:
struct HfmNode
{
HfmNode()
:weight_(0)
,parent_(-1)
,lchild_(-1)
,rchild_(-1)
,used_(false)
{}
int weight_;
int parent_;
int lchild_;
int rchild_;
bool used_;
};
typedef ::std::vector <HfmNode> NodeData;
typedef ::std::vector <char *> CodeData;
CodeData code_;
NodeData node_;
int leaf_;
int head_;
};
-------------------------------
HfmTree.cpp
-------------------------------
#include "hfmtree.h "
HfmTree::HfmTree(const int leaf, const int weightArr[])
{
if (leaf <= 0) return;
HfmNode new_node;
leaf_ = leaf;
for (int s = 0; s < leaf_; s++)
{
new_node.weight_ = weightArr[s];
node_.push_back(new_node);
}
for (int i = 0; i < leaf_-1; i++)
{
int wa, wb, na, nb;
wa = wb = HTree::MaxWeight;
for (int j = 0; j < leaf_; j++)
{
if (false == node_[i].used_)
{
if (node_[j].weight_ < wa)
{
wb = wa;
nb = na;
wa = node_[j].weight_;
na = j;
}
else if (node_[j].weight_ < wb)
{
wb = node_[j].weight_;
nb = j;
}
}
}
node_[na].parent_ = leaf_ + i;
node_[nb].parent_ = leaf_ + i;
node_[na].used_ = true;
node_[nb].used_ = true;
node_[leaf_ + i].weight_ = node_[na].weight_ + node_[nb].weight_;
node_[leaf_ + i].lchild_ = na;
node_[leaf_ + i].rchild_ = nb;
}
head_ = leaf_ * 2 - 2;
std::deque < char > stack_; // 从这行开始,deque声明却无法使用,一访问就报告内存访问出错误。
std::cout < < stack_.size() < < std::endl;
for (int q = 0; q < leaf_; q++)
{
int k = q, p;
这是我写的一个关于霍夫曼树的类,构造函数用来建树加预存编码,声明了的char型deque却无法访问,请各位高手帮忙分析一下解决办法。
-------------------------------
HfmTree.h
-------------------------------
#include <iostream>
#include <deque>
#include <vector>
namespace HTree
{
enum Henum
{
WeightArrNum = 2^8,
MaxWeight = 0xffff
};
}
class HfmTree
{
public:
explicit HfmTree(const int leaf, const int weightArr[]);
virtual ~HfmTree(void);
private:
struct HfmNode
{
HfmNode()
:weight_(0)
,parent_(-1)
,lchild_(-1)
,rchild_(-1)
,used_(false)
{}
int weight_;
int parent_;
int lchild_;
int rchild_;
bool used_;
};
typedef ::std::vector <HfmNode> NodeData;
typedef ::std::vector <char *> CodeData;
CodeData code_;
NodeData node_;
int leaf_;
int head_;
};
-------------------------------
HfmTree.cpp
-------------------------------
#include "hfmtree.h "
HfmTree::HfmTree(const int leaf, const int weightArr[])
{
if (leaf <= 0) return;
HfmNode new_node;
leaf_ = leaf;
for (int s = 0; s < leaf_; s++)
{
new_node.weight_ = weightArr[s];
node_.push_back(new_node);
}
for (int i = 0; i < leaf_-1; i++)
{
int wa, wb, na, nb;
wa = wb = HTree::MaxWeight;
for (int j = 0; j < leaf_; j++)
{
if (false == node_[i].used_)
{
if (node_[j].weight_ < wa)
{
wb = wa;
nb = na;
wa = node_[j].weight_;
na = j;
}
else if (node_[j].weight_ < wb)
{
wb = node_[j].weight_;
nb = j;
}
}
}
node_[na].parent_ = leaf_ + i;
node_[nb].parent_ = leaf_ + i;
node_[na].used_ = true;
node_[nb].used_ = true;
node_[leaf_ + i].weight_ = node_[na].weight_ + node_[nb].weight_;
node_[leaf_ + i].lchild_ = na;
node_[leaf_ + i].rchild_ = nb;
}
head_ = leaf_ * 2 - 2;
std::deque < char > stack_; // 从这行开始,deque声明却无法使用,一访问就报告内存访问出错误。
std::cout < < stack_.size() < < std::endl;
for (int q = 0; q < leaf_; q++)
{
int k = q, p;