更新时间:2023-11-28 11:33:28
问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;