java - C++ STL迭代器声明的iterator和reverse_iterator实质区别?是不同数值吗?
PHP中文网
PHP中文网 2017-04-18 10:47:50
0
2
815

问1:Vector<int>::reverse_iterator r1和Vector<int>::iterator r2。
r1和r2作用是截然不同的,这个:reverse_iterator和iterator实质是不同数值吗,为什么会有这个作用?

问2:ostream_iterator<int,char>out_iter(cout," ");括号(cout," ")是什么意思,这是个构造函数?为什么cout能给int赋值?

PHP中文网
PHP中文网

认证0级讲师

全部回覆(2)
PHPzhong

問1
reverse_iterator和iterator是兩個定義在vector類別模板內的迭代器類型。實作上可能是不同的類,如:


template </* ... */>
class vector {
 public:
  class ReverseIterator {...};
  class Iterator {...};

  using reverse_iterator = ReverseIterator;
  using iterator = Iterator;
};

reverse_iterator的迭代方向和iterator相反。即若r1和r2指向同一个元素,r1+1r2-1指向同一个元素(若有效,且它们分别重载了operator+operator-)。

實現迭代方向相反是透過不同的operator實現來實現的。如若迭代器內部透過指標來實現,reverse_iterator的operator++的实现可自减该指针,而iterator的operator++實作可自增該指標。

問2
ostream_iterator<int, char> out_iter(cout, " ");是声明并定义一个变量,且直接初始化(direct initialize)该变量。(cout, " ")是實際參數清單。編譯器會嘗試根據這個參數清單選擇一個建構函數,並將這些參數"傳給"該建構子。

根據標準,cout不能給int賦值,請給出相關代碼。但cout可以被轉換成bool(c++11之後)或void *(c++11之前)型別。這是因為cout的類型繼承了basic_ios的一個實例,而用於實例化該實例的basic_ios類別模板定義了相關轉換操作符。即可以bool x = std::cout;

洪涛
  1. 什麼叫兩個數值。 。 reverse_iteratoriterator是迭代器,實質是兩個類別模板​​
    透過在類別的內部重新實作函數的不同細節來實現不同功能,但對外介面一致

  2. 實例化一個物件out_iter,类型是ostream_iterator<int,char>,传入构造函数的参数是cout" "

「cout能給int賦值」這句話表意不明

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板