我不知道如何填充数组

I can't figure out how to fill an array

本文关键字:填充 数组 何填充 我不知道      更新时间:2023-10-16

我试图用传入值填充给定数组,所以如果我想要一个数组全部为12个它会简单地把所有元素都换成12。这个函数的原型是这样的:

void fill(T *left, T *end, T fill)

这个函数的驱动程序是这样的:

static void TestFill1(void)
{
   cout << "***** Fill1 *****" << endl;
   int i1[10];
   int size = 10;
   fill(i1, i1 + size, 12);
   display(i1, i1 + size);
}

我遇到了一个问题,我得到了一个未初始化的数组。在之前的赋值中,我一直遍历数组直到最后。在这种情况下,我得到了一个未初始化的数组,这使得我的T *end和T *left相同。我不熟悉如何遍历传入的数组

我正在尝试这样做:

template <typename T>
void fill(T *left, T *end, T fill)
{
  int i =  sizeof(*left) / sizeof(*(left + 0));
  while(*(left + i) != *end)
  {
    *(left + i) = fill;
    ++i;
  }
}

我不允许在这个赋值中使用下标或for循环,#include和std::vector一样是禁止的。

变量i,表示相对于第一个元素的偏移量,应该从0开始:

int i = 0;

循环条件检查数组元素的是否等于末尾数组元素的

while(*(left + i) != *end)

正确的版本如下:

while(left + i != end)

检查指针 (left + i)是否到达终点。

您的声明

int i =  sizeof(*left) / sizeof(*(left + 0));

可能不像你想象的那样。

sizeof()函数对普通指针的作用与对数组声明的作用不同:

size_t s = sizeof(*left); // Will evaluate to sizeof(T)

,

int i1[10];
size_t s = sizeof(i1); // Will evaluate to sizeof(int) * 10

你的代码可以简单地修改如下:

template <typename T>
void fill(T *left, T *end, T fill) {
    T* cur = left;
    while(cur < end) {
       *cur  = fill;
       ++cur;
    }
}

http://www.cplusplus.com/reference/vector/vector/assign/

#include <vector>
int main ()
{
  std::vector<int> first;
  first.assign (10,12);  // 10 ints with a value of 12
  return 0;
}

这是真正的男人怎么做™。哈哈,对不起,我忍不住了。