2

可能重复:
通过下标获取一个过去的数组元素的地址:C++ 标准是否合法?

在 C++ 标准库中,许多算法都将begin()andend()迭代器作为参数。但诀窍是end()迭代器在容器结束之后。如果我想将算法应用于标准 c 数组,我必须传递等效的begin()end()指针。

问题如下:

const unsigned int size = 10;
int array[size];
std::iota(&array[0], &array[size], 0); // <- Version 1
std::iota(&array[0], &array[0]+size, 0); // <- Version 2

这两个版本是否严格等效?根据 C++ 标准,我可以毫无问题地使用版本 1 吗?

我的怀疑来自这样一个事实,即&array[size]在数组结束之后访问元素然后获取它的地址,而&array[0]+size在数组结束之后不访问元素。

4

1 回答 1

3

只需使用std::beginand std::endfrom <iterator>,不用担心 - 他们会做正确的事情。:)

于 2012-11-05T03:01:52.553 回答