seguito è an example from cppreference.com,Confuso circa l'utilizzo di 'std :: istreambuf_iterator'
The Code is:
#include <vector>
#include <sstream>
#include <iostream>
#include <iterator>
int main()
{
// typical use case: an input stream represented as a pair of iterators
std::istringstream in("Hello, world");
std::vector<char> v((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
std::cout << "v has " << v.size() << " bytes. ";
v.push_back('\0');
std::cout << "it holds \"" << &v[0] << "\"\n";
// demonstration of the single-pass nature
std::istringstream s("abc");
std::istreambuf_iterator<char> i1(s), i2(s);
std::cout << "i1 returns " << *i1 << '\n'
<< "i2 returns " << *i2 << '\n';
++i1;
std::cout << "after incrementing i1, but not i2\n"
<< "i1 returns " << *i1 << '\n'
<< "i2 returns " << *i2 << '\n';
++i2; // this makes the apparent value of *i2 to jump from 'a' to 'c'
std::cout << "after incrementing i2, but not i1\n"
<< "i1 returns " << *i1 << '\n'
<< "i2 returns " << *i2 << '\n';
}
Ho due domande:
- Qualcuno può elaborare il codice di
std::vector<char> v((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
, io non capisco di cosa si tratta facendo..e perché possiamo stampare la stringa "Hello, world" usando semplicementecout<<&v[0]
- Perché il valore apprend di * i2 passa da "a" a "c"? qualcuno può spiegarne i meccanismi?
Grazie mille!
Inoltre, come è in grado di stampare il messaggio come '& v [0]'? :) – 0x499602D2
Perché 'v [0]' è un 'char' quindi' & v [0] 'è un' char * ' –
Molto dettagliato! Grazie per la tua risposta!!!! –