自定义对象压入vector时候的问题
{
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应该会自己重新申请空间吧?
相关推荐
C++中的vector容器对象学习笔记
C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector! vector 是同一种类型的对象的集合 ,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。 我们把 vector 称为容器,是因为它可以包含其他对象 。 一个容器中的所有对象都必须是同一种类型的 。 vector对象的定义和初始化 同样的,使用前,导入头文件#include 可以使用using声明:using std::vector; vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用
C++中vector可以作为map的键值实例代码
主要介绍了C++中vector可以作为map的键值实例代码,需要的朋友可以参考下
关于c++ 定义两个vector数组对象实现以下操作:
一、定义两个vector对象,分 别存放int、float数组元素,实现以下操作: 1.输入数组元素的值 2.修改数组中元素的值 3.向数组中间插入、删除元素 4.将数组首部和尾部元素删除 5.向数组首部和尾部插入元素 每次修改数组均输出当前数组元素。
C++ vector自定义大小[源码]
本文详细介绍了C++中vector容器自定义大小的几种方法,包括初始化时指定大小和默认值、使用resize函数调整大小以及二维vector的大小设置。文章通过代码示例展示了如何定义一维和二维vector,并指定其大小和初始值,同时指出了在指定大小后使用push_back的注意事项。此外,还提到了resize函数的初始化用法,但未深入探讨其详细功能。
详解C++中的vector容器及用迭代器访问vector的方法
使用迭代器iterator可以更方便地解引用和访问成员,当然也包括vector中的元素,本文就来详解C++中的vector容器及用迭代器访问vector的方法,需要的朋友可以参考下


