自定义对象压入vector时候的问题
class HuffmanNode
{
private:
int weight;//权值
char data;//对应的字符
public:
HuffmanNode* left;
HuffmanNode* right;
bool visit;
string code;//编码
HuffmanNode():weight(0),data(' '),left(NULL),right(NULL),
visit(false),code(""){}
HuffmanNode( const HuffmanNode& node);
~HuffmanNode()
{
}
HuffmanNode& operator= (const HuffmanNode& right);
bool SetWeight(int w);
int GetWeight() const;
bool SetData(char ch);
char GetData();
};
以上是HuffmanNode这个类的定义,以下是HuffmanTree的定义:
class HuffmanTree
{
private:
HuffmanNode* root;
vector<HuffmanNode> allNode;
HuffmanNode* FindMin();
int GetUnVisitCount();
HuffmanNode* GetUnVisitNode();
public:
HuffmanTree():root(NULL)
{
allNode.reserve(100);
}
bool Create();
bool SetAllNode(vector<HuffmanNode> node);
void GetAllHuffmanCode(HuffmanNode* t);
HuffmanNode* GetRoot() const;
void OutputAllCode();
};
在HuffmanTree的Create函数里面往allNode里push_back出错!
HuffmanNode* minnode1 = FindMin();
HuffmanNode* minnode2 = FindMin();
HuffmanNode newNode;
int newWeight = minnode1->GetWeight() + minnode2->GetWeight();
newNode.SetWeight(newWeight);
newNode.left = minnode1;
newNode.right = minnode2;
allNode.push_back(newNode);
调试的时候发现newNode赋值完全正确,但是在push_back之后,allNode里本应该出现newNode的副本,但是这个副本的left和right却和newNode不一样
后来google翻了几页终于找到解决方法了(http://blog.sina.com.cn/s/blog_4b9cc6db0100cbw3.html),在HuffmanTree的构造函数里面allNode.reserve(100)分配一下空间就行了,我想问这是为什么呢 为什么reserve一下就正确了,push_back空间不足的话vector应该会自己重新申请空间吧?