我无法弄清楚如何填充数组

时间:2014-03-27 02:33:15

标签: c++ arrays templates range stdvector

我正在尝试用传入的值填充给定的数组,所以如果我想要一个数组都是12' s 它只需用12s替换所有元素。我对此函数的原型如下所示:

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相同。

3 个答案:

答案 0 :(得分:1)

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

int i = 0;

循环条件是检查数组元素的是否等于最后数组元素的

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

正确的版本如下:

while(left + i != end)

检查指针 (left + i)是否已到达结尾。

答案 1 :(得分:0)

您的陈述

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;
    }
}

答案 2 :(得分:0)

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;
}

这就是真正的男人如何做到这一点。大声抱歉,我无法抗拒。