从 C++ 中的矢量指向对象的去引用指针

Derefence pointer to object from vector in C++

本文关键字:对象 引用 指针 C++      更新时间:2023-10-16

我有一个插入具有以下函数的节点的类:

在节点中

class Node
{
public:
...
void insertChild(Node *child);
vector<Node *> children();
vector<Node *> _children;
};

在节点中.cpp

void Node::insertChild(Node *child){
    _children.push_back(child);
}
vector<Node *> Node::children(){
return _children;
}

在特里·

class Trie
{
public:
Node *getRoot() const;
Node *root;
void addWord(string prefix);
}

在特里.cpp

Trie::Trie()
{
root = new Node();
}
Node *Trie::getRoot() const
{
return root;
}
void Trie::addWord(string prefix){
    Node *current = root;
    if(prefix.length() == 0)
    {
        current->setTypeMarker(DAT_NODE);
        return;
    }
    for(int i = 0; i < prefix.length(); i++){
        Node *child = current->lookupChild(prefix[i]);
        if(child != NULL)
        {
            current = child;
        }
        else
        {
            Node *tmp = new Node();
            tmp->setContent(prefix[i]);
            current->insertChild(tmp);
            current = tmp;
        }
        if(i == prefix.length()-1)
            current->setTypeMarker(DAT_NODE);
     }
}

在另一堂课上,我想遍历_children所以我有

In OtherClass.h

class OtherClass
{
public:
Trie *trie;
void addWords(string word)
void someFunction()
}

在其他类中.cpp

OtherClass::OtherClass()
{
tree = new Trie();
}
void OtherClass::addWords(string word)
{
tree->addWord(word);
}
void OtherClass::someFunction()
{
Node *root = tree->getRoot();
    for(std::vector<Node *>::iterator it = root->children().begin(); it != root->children().end(); it++) {
        Node * test = *it;
    }
}

但是,当我运行它时,测试为零。我可以查看根并看到子节点包含我的节点,但是为什么我不能在向量迭代器中取消引用它们? children()是我_children的获取者

可能是你的 getter 返回 std::vector 按值而不是按引用?

吸气剂应如下所示:

std::vector<Node*>& Node::children()
{
    return _children;
}

或者对于像这样的常量版本:

const std::vector<Node*>& Node::children() const
{
    return _children;
}