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

问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级讲师

membalas semua(2)
PHPzhong

Soalan 1
reverse_iterator dan iterator ialah dua jenis iterator yang ditakrifkan dalam templat kelas vektor. Pelaksanaan mungkin kelas yang berbeza, seperti:


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

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

reverse_iterator adalah bertentangan dengan arah iterator. Iaitu, jika r1 dan r2 menghala ke elemen yang sama, r1+1 dan r2-1 menghala ke elemen yang sama (jika sah, dan mereka melebihkan operator+ dan operator- masing-masing).

Arah lelaran yang bertentangan dicapai melalui pelaksanaan pengendali yang berbeza. Jika iterator dilaksanakan secara dalaman oleh penunjuk, pelaksanaan operator++ reverse_iterator boleh mengurangkan penunjuk, dan operator++ pelaksanaan iterator boleh menambah penunjuk.

Soalan 2
ostream_iterator<int, char> out_iter(cout, " "); mengisytiharkan dan mentakrifkan pembolehubah, dan memulakan pembolehubah secara langsung. (cout, " ") ialah senarai parameter sebenar. Pengkompil akan cuba memilih pembina berdasarkan senarai parameter ini dan "lulus" parameter ini kepada pembina.

Mengikut standard, cout tidak boleh memberikan nilai kepada int. Sila berikan kod yang berkaitan. Tetapi cout boleh ditukar kepada jenis bool (selepas c++11) atau void * (sebelum c++11). Ini kerana jenis cout mewarisi tika basic_ios dan templat kelas basic_ios yang digunakan untuk membuat instantiat mentakrifkan pengendali penukaran yang berkaitan. Iaitu, bool x = std::cout;

洪涛
  1. Apakah dua nilai berangka? . reverse_iterator dan iterator ialah iterator, pada asasnya dua templat kelas
    mencapai fungsi yang berbeza dengan melaksanakan semula butiran fungsi yang berbeza di dalam kelas, tetapi antara muka luaran adalah sama

  2. menjadikan objek out_iter, jenisnya ialah ostream_iterator<int,char>, dan parameter yang dihantar ke dalam pembina ialah cout dan " "

Maksud ayat "cout can assign a value to int" tidak jelas

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan