2013-07-24 12 views
5

per il codice, perché errore, osteam_iterator è una classe template, perché nessun costruttore corrispondente per l'inizializzazione di 'ostream_iterator', si prega di fornire un aiuto, grazie. definiscono ostream_iterator template> classe ostream_iterator _LIBCPP_VISIBLENessun costruttore corrispondente per l'inizializzazione di 'ostream_iterator <int>'

int main(int argc, const char * argv[]) 
{ 
    vector<int> sentence1; 
    sentence1.reserve(5);// 设置每次分配内存的大小 

    sentence1.push_back(1); 
    sentence1.push_back(2); 
    sentence1.push_back(3); 
    sentence1.push_back(4); 
    sentence1.push_back(5); 

    int c = 5; 

    copy(sentence1.begin(), sentence1.end(), ostream_iterator<int>(cout, 1)); 
    cout << endl; 
+0

http://en.cppreference.com/w/cpp/iterator/ostream_iterator/ostream_iterator –

+0

cosa significa, questo collegamento è la pagina corrente. –

+0

Oops, l'ho risolto ora;) –

risposta

0

La definizione della classe ostream_iterator assomiglia:

template< class T, 
    class CharT = char, 
    class Traits = std::char_traits<charT>> 
class ostream_iterator /*...*/ 

mentre il rispettivo costruttore viene dichiarata come:

ostream_iterator(ostream_type& buffer, const CharT* delim) 

Dal momento che il secondo argomento modello di una ostream_iterator è necessaria per essere di tipo carattere non può semplicemente sostituirlo con int.

Se ommit il secondo parametro del modello è possibile collegare una stringa letterale di tipo char const *:

std::copy(sentence1.begin(), sentence1.end(), std::ostream_iterator<int>(cout, ",")); 

Se C++ 11 è disponibile per voi allora

int c = 5; 
for (auto v : sentence1) std::cout << v << c; 

è un altro modo di facendo ciò che meriti e potrebbe anche essere adatto. Il vantaggio è che operator<< è più flessibile di un argomento di tipo "puntatore al tipo di carattere".

+0

Non mi piace il downvoting senza senso. – Pixelchemist

2

Il std::ostream_iterator prende una stringa come secondo parametro al costruttore. Questa è la stringa che verrà emessa dopo ogni numero intero nella sequenza.

5

ostream_iterator costruttore prende const CharT* delim come secondo parametro:

ostream_iterator (ostream_type & flusso, Tabella const * delim) (1)

ostream_iterator (ostream_type & flusso) (2)

Per far funzionare il tuo codice, devi passare una stringa:

std::copy(sentence1.begin(), sentence1.end(), std::ostream_iterator<int>(cout, "1")); 
//                    ^^^^ 
+0

grazie, sì, ha funzionato. –

Problemi correlati