簡體   English   中英

如何定義迭代器類的成員類型以使用STL容器方法?

[英]How to define the type of a member of an iterator class to work with STL container methods?

我希望在向量上定義一個迭代器類,它的私有成員p如何匹配std :: vector :: begin()的返回類型?

class A{

struct element{
      ...
}

  class e_iterator {

  e_iterator() : p()

    ...

    private:
      element* p;  
  };

  e_iterator e_begin() const{
     e_iterator Iter;
     Iter.p = e_.begin(); // error
     return Iter;
  }

 std::vector<element> e_; 

我收到element* p的錯誤:

error: cannot convert 'std::vector<element, std::allocator<element>>::const_iterator' to 'element*' in assignment

根據你給出的,我建議的最多是將p改為:

std::vector<element>::const_iterator p;

簡單的事實是std::vector迭代器不是指針(可能)。 它是一種未指定的類型,其行為類似於指針 - 它滿足隨機訪問迭代器的要求。

在非const容器上調用begin()時,會得到iterator類型。 const迭代器上調用它時,會得到一個const_iterator類型。 由於你的a_begin成員函數被標記為conste_似乎是你的類的std::vector<element>成員,所以e_是傳遞const ,所以在它上面調用begin()也會得到一個const_iterator

但是很難准確地說出你在這里想做什么,以及這是否是正確的方法。

在迭代器類中將element* p更改為const element* p或從e_begin()方法中刪除const限定符。 或者提供const / non-const迭代器。 我還建議初始化迭代器構造函數中的指針:

template <bool isconst>
class e_iterator_ {

  public:
    typedef std::conditional<isconst, const element*, element*>::type elementptr;

    e_iterator_(elementptr e) : p(e)

  ...

  private:
    elementptr p;  
};

typedef e_iterator_<true> const_e_iterator;
typedef e_iterator_<false> e_iterator;

然后你可以使用std :: vector的data()成員方法直接訪問向量的底層數組。

  e_iterator e_begin() const{
     const_e_iterator Iter(e_.data());
     return Iter;
  }

希望這可以幫助。

暫無
暫無

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

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