问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 は、ベクター クラス テンプレートで定義されている 2 つの反復子の型です。実装は次のような異なるクラスになる場合があります:
reverse_iterator
の反復方向は iterator
の反復方向と逆です。つまり、r1 と r2 が同じ要素を指す場合、r1+1
と r2-1
は同じ要素を指します (有効な場合)。また、それぞれ をオーバーロードします。演算子+< /code> および
演算子-
)。 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;
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;
🎜PHP中文网2017-04-18 10:49:50
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」という文の意味が不明瞭です🎜