问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赋值?
PHPz2017-04-18 10:49:50
問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+1
和r2-1
指向同一个元素(若有效,且它们分别重载了operator+
和operator-
)。
實現迭代方向相反是透過不同的operator實現來實現的。如若迭代器內部透過指標來實現,reverse_iterator的operator++
的实现可自减该指针,而iterator的operator++
實作可自增該指標。
問2ostream_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;
PHP中文网2017-04-18 10:49:50
什麼叫兩個數值。 。 reverse_iterator
和iterator
是迭代器,實質是兩個類別模板
透過在類別的內部重新實作函數的不同細節來實現不同功能,但對外介面一致
實例化一個物件out_iter
,类型是ostream_iterator<int,char>
,传入构造函数的参数是cout
和" "
「cout能給int賦值」這句話表意不明