C++ 用不同的索引起始点初始化数组到任意N?

C++ 用不同的索引起始点初始化数组到任意N?,c++,c++11,C++,C++11,我已经在这里坐了几个小时了,试图弄清楚如何用指定的array[index]初始化数组,不是0-n,而是n-n,这意味着索引可以是:3,然后递增到n int array[]; std::iota(std::begin(array), std::end(array), 2); 那条线做了一件事,但不是我想要的。由于我将数组的值填充为bool,并在默认情况下将all设置为false,但是,索引从0-N开始 是否可能: int array[std::advance(iter, 2)] [0]:2 [

我已经在这里坐了几个小时了,试图弄清楚如何用指定的
array[index]
初始化数组,不是
0-n
,而是
n-n
,这意味着索引可以是:3,然后递增到n

int array[];
std::iota(std::begin(array), std::end(array), 2);
那条线做了一件事,但不是我想要的。由于我将数组的值填充为
bool
,并在默认情况下将all设置为
false
,但是,索引从
0-N
开始

是否可能:

int array[std::advance(iter, 2)]
[0]:2
[1]:3
[2]:4
[3]:5
[4]:6
[5]:7
[6]:8
[7]:9
[8]:10
当我运行时,
std::iota(std::begin(数组),std::end(数组),2)然后下面的输出看起来就是这样,但是,我希望它是:[2]:false,[3]:false。。。N

输出:

int array[std::advance(iter, 2)]
[0]:2
[1]:3
[2]:4
[3]:5
[4]:6
[5]:7
[6]:8
[7]:9
[8]:10
您可以使用来填充从索引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), std::end(array), firstVal);

   for ( auto const & x : array )
      std::cout << x << ' ';
    
   std::cout << std::endl;
 }

我不清楚你期望的结果是什么。你能添加一个例子吗?@cigien,我只想用false初始化一个数组,但索引和index++不同,这意味着如果它从index=5开始,它将继续递增,直到N。对不起。我觉得这个描述很难理解。举个例子会更好。由于您的代码没有实际编译,所以请创建一个数组,并显示您想要的输出。您有一个
int
数组,因此不能使用
false
。你想用0填充吗?@cigien,是的,我知道。但是,这是一个小问题。我想知道是否有一种很好的方法可以将数组的索引从n开始到n,但没有效果。绝对没有任何效果。@JohnSmith-answer通过一个完整的编译示例得到了改进,该示例同时适用于clang++和g++。我以前尝试过std::fill(),但我想我只是误解了它,因此转而尝试其他方法。;-)谢谢你,伙计。