关于C++数组类型

开源中国原谅帽派送员 发布于 09/19 10:00
阅读 185
收藏 0

解锁HarmonyOS核心技能,赢取限量周边好礼>>>

#include <iostream>

// 定义字符大小
#define CHAR_SIZE 128

// 表示Trie节点的类
class Trie
{
public:
    bool isLeaf;
    Trie* character[128];

    // 构造函数
    Trie()
    {
        this->isLeaf = false;

        for (int i = 0; i < CHAR_SIZE; i++)
            this->character[i] = nullptr;
    }

    void insert(std::string);
    bool deletion(Trie*&, std::string);
    bool search(std::string);
    bool haveChildren(Trie const*);
};

// 迭代函数:在Trie中插入一个键
void Trie::insert(std::string key)
{
    // 从根节点开始
    Trie* curr = this;
    for (int i = 0; i < key.length(); i++)
    {
        // 如果路径不存在,则创建一个新节点
        if (curr->character[key[i]] == nullptr)
            curr->character[key[i]] = new Trie();

        // 转到下一个节点
        curr = curr->character[key[i]];
    }

    // 将当前节点标记为叶子
    curr->isLeaf = true;
}

不明白这个character不是Tries* 类型吗?为什么里面又可以存放字符。key[i]这种。

新手小白,不懂就问

加载中
0
infoworld
infoworld

key[i]类型是char,character也是数组,他的索引是int类型,char会自动转换为int类型。语法上是可以的。

0
ArchitectureMaster
ArchitectureMaster

Trie加不加*代表的意思是不一样的。在C或C++里任意类型加*代表的是这个类型的地址类型。很多人对*只是按字面上的理解,其实如果这样理解会很简单,数据在内存存储,内存需要像房间一样划分成房间,数据是放在房间里,而房间号被称为地址。而有的房间装的是直接的数据,有的房间里装的是房间号。内存分成地址和内容两部分。地址里存储的地址就是加*号,如果存储的是直接的内容就不加*。

而C语言里指针*代表地址里存储的也是地址。而像Trie*就是存储的首地址。用这个首地址可以用->指向到此class下所有的成员。数组只是内存地址的集合。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部