在C ++标准库中,许多算法将begin()
和end()
迭代器作为参数。但诀窍是end()
迭代器在容器结束之后。如果我想将算法应用于标准c-array,我必须传递等效的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
在数组结束后不访问该元素。
答案 0 :(得分:3)
只需使用std::begin
中的std::end
和<iterator>
,不要担心 - 他们会做正确的事情。 :)