[英]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
成員函數被標記為const
而e_
似乎是你的類的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.