在 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
在数组结束之后不访问元素。