我正在尝试执行以下操作:
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>
标头。有人可以帮我吗?
答案 0 :(得分:13)
模板函数std :: begin()和std :: end()没有为指针实现(指针不包含有关它们引用的元素数量的信息)而是应该编写它们
std::copy( source, source + 10, dest);
至于错误,您应该检查是否包含标题
#include <iterator>
也许您的编译器不支持C ++ 2011 Standard。
答案 1 :(得分:2)
除了在启用C ++ 11的编译器中包含<iterator>
之外。您应该知道begin/end
对指针没用,它们对数组很有用:
int source[10];
int dest[10];
std::copy(std::begin(source), std::end(source), std::begin(dest));
答案 2 :(得分:-1)
在linux中使用g ++编译这段代码时也有这个问题。
使用包含C ++特征的g ++编译器应该添加C ++ 11标志
g++ -std=c++11 -o test test.cpp