c++ - 如何实现这个集合模板类的构造函数和析构函数?
问题描述
我正在尝试使用 B 树(平衡树)结构实现一个集合模板类。私有成员:'''data[MAXIMUM + 1]''' 具有树中当前节点的元素。'''set* subset[MAXIMUM + 2]''' 具有指向当前集合的孩子的指针,这些孩子也是集合类型。我正在尝试实现默认构造函数,它应该创建一个空集和一个使用函数 clear 清空集合的析构函数。但是,我不明白构造函数应该初始化什么以及析构函数会释放什么。这是文本中的代码:数据结构-Main,Savitch 4th edition-ch12,其中 Savitch 通过执行此模板集来解释 B 树。但是,他并没有经历构造函数和析构函数的实现。
这是代码:
template <class Item>
class set
{
public:
// TYPEDEFS
typedef Item value_type;
// CONSTRUCTORS and DESTRUCTOR
set();
set(const set& source);
~set() { clear(); }
// MODIFICATION MEMBER FUNCTIONS
void operator =(const set& source);
void clear();
bool insert(const Item& entry);
std::size_t erase(const Item& target);
// CONSTANT MEMBER FUNCTIONS
std::size_t count(const Item& target) const;
bool empty() const { return (data_count == 0); }
// SUGGESTED FUNCTION FOR DEBUGGING
void print(int indent) const;
private:
// MEMBER CONSTANTS
static const std::size_t MINIMUM = 200;
static const std::size_t MAXIMUM = 2 * MINIMUM;
// MEMBER VARIABLES
std::size_t data_count;
Item data[MAXIMUM + 1];
std::size_t child_count;
set* subset[MAXIMUM + 2];
// HELPER MEMBER FUNCTIONS
bool is_leaf() const { return (child_count == 0); }
bool loose_insert(const Item& entry);
bool loose_erase(const Item& target);
void remove_biggest(Item& removed_entry);
void fix_excess(std::size_t i);
void fix_shortage(std::size_t i);
解决方案
如果我正确理解您的想法,child_count
是subset
数组中有效条目的计数。如果是这样,请在默认构造函数中将其初始化为零。析构函数delete
将需要.child_count
subset
对于数据,再次,如果我理解正确的话,data_count
是data
数组中有效条目的计数。如果是这样,您也需要将其初始化为 0。但是由于data
元素是值而不是指针,它们在构造函数中被初始化并在析构函数中自动完成。
通常最好将原始存储与所有放置新机器一起使用,以防止创建MAXIMUM + 1
项目,即使对于空节点,也允许Item
s 根本没有默认构造函数,但这需要非常小心,不要遇到 UB。
推荐阅读
- c# - nservicebus 使用 msmq 传输发送具有列表类型属性的命令对象
- wordpress - 在自定义评论框中提交评论后如何弹出框?
- android - Android Studio 和 Android SDK 25 glob()
- winapi - 确定可移动磁盘的驱动器号(dos 名称)
- r - 如何在 ggplot2 折线图中制作半线?
- python - 自定义python类的YAML加载期间的AttributeError
- python - 一个或多个映射器未能初始化:relationship 'post' 需要一个类或一个映射器参数
- r - R中带有嵌套数据框的过滤器列表
- deep-learning - VGGnet 的架构。什么是多作物、密集评估?
- c# - 在服务之间共享 HttpClient