如何解决用不同的索引起始点初始化一个数组到N?
我已经坐在这里几个小时了,试图弄清楚如何使用指定的array[index]
(不是0-n
,而是n-N
来初始化数组),这意味着索引可以是:3,然后递增到N。
int array[];
std::iota(std::begin(array),std::end(array),2);
那条线只做一件事,而不是我想要的。由于我将数组的值填充为bool
并默认将所有值都设置为false
,但是,索引从0-N
开始。
可以吗?
int array[std::advance(iter,2)]
我跑步时,std::iota(std::begin(array),2);
然后下面的输出看起来像那样,但是,我希望它是:[2]:false,[3]:false,... N。
输出:
[0]:2
[1]:3
[2]:4
[3]:5
[4]:6
[5]:7
[6]:8
[7]:9
[8]:10
解决方法
您可以使用std::fill
填充从索引2开始的范围,并使用一些值N
,如下所示:
std::fill(std::begin(array) + 2,std::end(array),N);
,
您无法使用std::iota()
,因为您必须明确说明数组的大小。
如果已知您的起点和终点是编译时,则可以尝试以下操作
#include <numeric>
#include <iostream>
int main ()
{
constexpr auto lastVal = 10;
constexpr auto firstVal = 2;
int array[lastVal-firstVal+1];
std::iota(std::begin(array),firstVal);
for ( auto const & x : array )
std::cout << x << ' ';
std::cout << std::endl;
}
可打印
2 3 4 5 6 7 8 9 10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。