2013-11-09 4 views
7

Я пытаюсь сделать следующую операцию:C++ 11: ошибка: «начать» не является членом «Std»

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

Однако компилятор сообщает следующее сообщение об ошибке.

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’ 

Я включил нужный <iterator> заголовок в коде. Может ли кто-нибудь помочь мне в этом?

+3

Включить C++ 11. (fill) – 0x499602D2

ответ

12

шаблон функция STD :: начать() и станд :: конец() не выполняется для указателей (указатели не содержат информацию о количестве элементов они относятся) Вместо них вы должны написать

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

Что касается ошибки, вы должны проверить, включен ли заголовок

#include <iterator> 

Кроме того, может быть, ваш компилятор не поддерживает C++ 2011 Standard.

+0

Если вы определяете источник и dest как int source [10], dest [10]; то вы действительно можете использовать эти функции. –

2

В дополнение к включению <iterator> в компилятор с поддержкой C++ 11. Вы должны знать, что begin/end не полезны для указателей, они полезны для массивов:

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

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

+1 Но если у него есть доступ к функциям C++ 11, он должен использовать 'std :: array'. – 0x499602D2

+1

@ 0x499602D2: Согласитесь, но иногда простой '[]' не является плохим выбором для простых проектов/кодов. – deepmax

Смежные вопросы