C++11: 错误:‘begin’不是‘std’的成员

10

我正在尝试执行以下操作:

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个回答

15

模板函数 std::begin() 和 std::end() 在指针上没有实现(指针不包含有关所引用元素数量的信息)。你应该使用它们的替代写法:

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

关于这个错误,你需要检查是否包含了头部文件。

#include <iterator>

也许你的编译器不支持C++ 2011标准。


如果您将源(source)和目标(dest)定义为 int source[10], dest[10],那么确实可以使用这些函数。 - Vlad from Moscow

2

除了在支持C++11的编译器中包含<iterator>外,您还应该知道begin/end对于指针并不实用,它们对于数组非常有用:

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

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

+1 但如果他有使用C++11功能的权限,他应该使用std::array - David G
1
@0x499602D2: 同意,但有时对于简单项目/代码来说,一个简单的[]也不是个坏选择。 - masoud

-1

在Linux中使用g++编译器时,我也遇到了这个问题。

使用包含C++特性的g++编译器应该添加C++11标志。

g++ -std=c++11 -o test test.cpp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接