首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用std::generate

如何使用std::generate
EN

Stack Overflow用户
提问于 2022-08-02 15:10:09
回答 1查看 125关注 0票数 0

https://en.cppreference.com/w/cpp/algorithm/generate

它需要参数的状态

ForwardIt first,ForwardIt last,Generator g

描述是

首先分配范围内的每个元素,最后分配由给定函数对象g生成的值。

因此,我用X元素声明了Array (std::array),其中

代码语言:javascript
复制
std::generate(&Arr[0],&Arr[X],[](){...})  

造成了越界违规。

std::generate(&Arr[0],&Arr[X-1],[](){...})没有。注意:在一个小型测试程序中,我看到std::generate(&Arr[0],&Arr[X-1],[](){...})没有初始化最后一个元素。

接下来我试着用

代码语言:javascript
复制
std::generate(&Arr.front(),&Arr.back(),[&gen](){

注意:这里的效果相同:最后一个元素没有初始化。

但在互联网上你也能看到

代码语言:javascript
复制
std::generate(Arr.begin(),Arr.end(),[&gen](){

它编译得很好(并且似乎在初始化最后一个元素时正确地工作)

现在我想知道Arr.end()和range [ first,last)是如何匹配的,因为end()是一个先出边界元素的迭代器,或者我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 15:17:30

允许在数组结束后形成指针,但不能取消引用。

对于原始数组,&Arr[X]被定义为等价于&*(Arr + X),即您首先取消引用,然后获取地址。容器根据(隐藏的)原始数组定义[]

同样,begin()end()将分别类似于return Arr;return Arr + size;

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73209866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档