簡體   English   中英

C++中的鏈表實現

[英]Linked List implementation in C++

我有三個標頭(.hpp)文件,它們定義了一個節點、一個單向鏈表和一個迭代器。 這應該一起構建我的單鏈表。 這是節點。

#ifndef NODE_HPP
#define NODE_HPP

#include <iostream>
#include <string>

template <typename T> struct node {


public:
    explicit node(const T& value, node* next = 0): value_(value), next_(next){}


private:
    T value_;
    node* next_;

};

#endif //NODE_HPP

這是我的清單

#ifndef SLIST_HPP
#define SLIST_HPP

#include "node.hpp"
#include "iterator.hpp"

template <typename T> class slist{

public:
    class iterator;

    slist() :head_(0){ }

    bool empty() const{return (head_==0);}

    int size() const{
        int s=0;
        iterator last=end();
        for(iterator i= begin(); i!= last; ++i; ++s);
        return s;
    };

    iterator begin() { return iterator(head_); }
    iterator end() { return iterator(0); }

    void insert(iterator p, const T& t);

    void erase(iterator p){
        node<T>* tmp = p.node_->next_;
        p.node_->value = p.node_->next_.value;
        p.node_->next_=p.node_->next_->next_;

        delete tmp;
        return p;
    };

private:
    node<T>* head_;

};

#endif //SLIST_HPP

這是我的迭代器類

#ifndef ITERATOR_HPP
#define ITERATOR_HPP

#include "slist.hpp"
#include "node.hpp"



class iterator{

public:
    explicit iterator(node<T>* node=0) :node_(node){ }

    T& operator* (){return node_-> value_;}
    T* operator->(){return node_->value_;}

    iterator& operator++(){
        if(node_ != 0) node_ = node_->next_;
        return *this;
    }

    iterator operator++(int){
        iterator tmp = *this;
        if(node_!= 0) node_ = node_->next_;
        return tmp;
    }

    bool operator==(const iterator& iter) const { return (node_ == iter.node_); }

    bool operator!=(const iterator& iter) const { return (node_ != iter.node_); }


private:
    node<T>* node_;
};

#endif //ITERATOR_HPP

問題似乎沒有得到解決。 代碼無法編譯,因為盡管在 slist 中定義了迭代器,但 slist 無法從迭代器中讀取值。 甚至迭代器類本身在返回迭代器對象的方法上也顯示為波浪形。 有人可以幫助我了解這里出了什么問題。

如果您的編譯器沒有告訴您問題出在哪里,請從簡單開始並逐步構建。 你能想到的最簡單的iterator是什么? 嘗試這個:

template <typename T>
class iterator{
};

到現在為止還挺好。 現在一次增加一點復雜性,在每一步進行測試。 您現在可以編寫slist ,或向iterator添加功能。 一旦你寫了類似的東西,你就會注意到一個問題

for(iterator i= begin(); i!= last; ++i; ++s);

當您遇到這樣的障礙時,在修復它之前不要增加任何復雜性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM