2013-11-09 11 views
7

Io sto cercando di fare la seguente operazione:C++ 11: errore: ‘cominciare’ non è un membro di ‘std’

source = new int[10]; 
dest = new int[10]; 
std::copy(std::begin(source), std::end(source), std::begin(dest)); 

Tuttavia, il compilatore segnala il seguente errore.

copy.cpp:5434:14: error: ‘begin’ is not a member of ‘std’ 
copy.cpp:5434:44: error: ‘end’ is not a member of ‘std’ 
copy.cpp:5434:72: error: ‘begin’ is not a member of ‘std’ 

ho incluso la richiesta <iterator> intestazione nel codice. Qualcuno può aiutarmi su questo?

+3

Abilitare C++ 11. (compilare) – 0x499602D2

risposta

12

funzioni template std :: begin() e std :: end() non sono implementate per i puntatori (puntatori non contengono informazioni circa il numero di elementi a cui si riferiscono) li Invece si dovrebbe scrivere

std::copy(source, source + 10, dest); 

per quanto riguarda l'errore si dovrebbe verificare se hai incluso intestazione

#include <iterator> 

anche forse il compilatore non supporta il C++ 2011 standard.

+0

Se si definirà source e dest come int source [10], dest [10]; allora in effetti potresti usare queste funzioni. –

2

Oltre a includere <iterator> nel compilatore abilitato C++ 11. È necessario sapere che begin/end non sono utili per i puntatori, sono utili per gli array:

int source[10]; 
int dest[10]; 

std::copy(std::begin(source), std::end(source), std::begin(dest)); 
+0

+1 Ma se ha accesso alle funzionalità del C++ 11 dovrebbe usare 'std :: array'. – 0x499602D2

+1

@ 0x499602D2: d'accordo, ma a volte un semplice '[]' non è una cattiva scelta per progetti/codici semplici. – deepmax