问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赋值?
认证0级讲师
質問 1reverse_iterator と iterator は、ベクター クラス テンプレートで定義されている 2 つの反復子の型です。実装は次のような異なるクラスになる場合があります:
reverse_iterator の反復方向は iterator の反復方向と逆です。つまり、r1 と r2 が同じ要素を指す場合、r1+1 と r2-1 は同じ要素を指します (有効な場合)。また、それぞれ をオーバーロードします。演算子+ および 演算子-)。 reverse_iterator的迭代方向和iterator相反。即若r1和r2指向同一个元素,r1+1和r2-1指向同一个元素(若有效,且它们分别重载了operator+和operator-)。
reverse_iterator
iterator
r1+1
r2-1
をオーバーロードします。演算子+ および 演算子-)。 reverse_iterator的迭代方向和iterator相反。即若r1和r2指向同一个元素,r1+1和r2-1指向同一个元素(若有效,且它们分别重载了operator+和operator-)。
演算子-
operator+
operator-
实现迭代方向相反是通过不同的operator实现来实现的。如若迭代器内部通过指针来实现,reverse_iterator的operator++的实现可自减该指针,而iterator的operator++实现可自增该指针。
operator++
问2ostream_iterator<int, char> out_iter(cout, " ");是声明并定义一个变量,且直接初始化(direct initialize)该变量。(cout, " ")是实际参数列表。编译器会尝试根据这个参数列表选择一个构造函数,并将这些参数"传给"该构造函数。
ostream_iterator<int, char> out_iter(cout, " ");
(cout, " ")
根据标准,cout不能给int赋值,请给出相关代码。但cout可以被转换成bool(c++11之后)或void *(c++11之前)类型。这是因为cout的类型继承了basic_ios的一个实例,而用于实例化该实例的basic_ios类模板定义了相关转换操作符。即可以bool x = std::cout;
bool x = std::cout;
2つの数値とは何ですか? 。 reverse_iterator と iterator はイテレータであり、本質的に 2 つのクラス テンプレートです クラス内の関数のさまざまな詳細を再実装することでさまざまな機能が実現されますが、外部インターフェイスは同じですreverse_iterator和iterator是迭代器,实质是两个类模板通过在类的内部重新实现函数的不同细节来实现不同功能,但对外接口一致
实例化一个对象out_iter,类型是ostream_iterator<int,char>,传入构造函数的参数是cout和" "
out_iter
ostream_iterator<int,char>
cout
" "
です。 > " "
質問 1
リーリーreverse_iterator と iterator は、ベクター クラス テンプレートで定義されている 2 つの反復子の型です。実装は次のような異なるクラスになる場合があります:
reverse_iterator
の反復方向はiterator
の反復方向と逆です。つまり、r1 と r2 が同じ要素を指す場合、r1+1
とr2-1
は同じ要素を指します (有効な場合)。また、それぞれをオーバーロードします。演算子+ および
演算子-
)。reverse_iterator
的迭代方向和iterator
相反。即若r1和r2指向同一个元素,r1+1
和r2-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类模板定义了相关转换操作符。即可以
反対方向の反復は、さまざまな演算子の実装を通じて実現されます。イテレータがポインタによって内部実装されている場合、reverse_iterator のbool x = std::cout;
operator++
実装はポインタをデクリメントでき、イテレータのoperator++
実装はポインタをインクリメントできます。 🎜 🎜🎜質問 2🎜🎜ostream_iterator<int, char> out_iter(cout, " ");
は、変数を宣言および定義し、変数を直接初期化します。(cout, " ")
は実際のパラメータのリストです。コンパイラは、このパラメータ リストに基づいてコンストラクタを選択し、パラメータをコンストラクタに「渡そう」とします。 🎜 🎜標準に従って、cout は int に値を代入できません。関連するコードを指定してください。ただし、cout は bool (c++11 以降) または void * (c++11 より前) 型に変換できます。これは、cout の型が Basic_ios のインスタンスを継承し、インスタンスのインスタンス化に使用される Basic_ios クラス テンプレートが関連する変換演算子を定義するためです。つまり、bool x = std::cout;
🎜2つの数値とは何ですか? 。
reverse_iterator
とiterator
はイテレータであり、本質的に 2 つのクラス テンプレートですクラス内の関数のさまざまな詳細を再実装することでさまざまな機能が実現されますが、外部インターフェイスは同じです
reverse_iterator
和iterator
是迭代器,实质是两个类模板通过在类的内部重新实现函数的不同细节来实现不同功能,但对外接口一致
实例化一个对象
out_iter
,类型是ostream_iterator<int,char>
,传入构造函数的参数是cout
和" "
out_iter
をインスタンス化します。タイプはostream_iterator<int,char>
で、コンストラクターに渡されるパラメーターはcout
とです。 > " "
🎜 🎜「cout can assign a value to int」という文の意味が不明瞭です🎜