https://en.cppreference.com/w/cpp/algorithm/generate
它需要参数的状态
ForwardIt first,ForwardIt last,Generator g
描述是
首先分配范围内的每个元素,最后分配由给定函数对象g生成的值。
因此,我用X元素声明了Array (std::array),其中
std::generate(&Arr[0],&Arr[X],[](){...}) 造成了越界违规。
而std::generate(&Arr[0],&Arr[X-1],[](){...})没有。注意:在一个小型测试程序中,我看到std::generate(&Arr[0],&Arr[X-1],[](){...})没有初始化最后一个元素。
接下来我试着用
std::generate(&Arr.front(),&Arr.back(),[&gen](){注意:这里的效果相同:最后一个元素没有初始化。
但在互联网上你也能看到
std::generate(Arr.begin(),Arr.end(),[&gen](){它编译得很好(并且似乎在初始化最后一个元素时正确地工作)
现在我想知道Arr.end()和range [ first,last)是如何匹配的,因为end()是一个先出边界元素的迭代器,或者我做错了什么?
发布于 2022-08-02 15:17:30
允许在数组结束后形成指针,但不能取消引用。
对于原始数组,&Arr[X]被定义为等价于&*(Arr + X),即您首先取消引用,然后获取地址。容器根据(隐藏的)原始数组定义[]。
同样,begin()和end()将分别类似于return Arr;和return Arr + size;。
https://stackoverflow.com/questions/73209866
复制相似问题