簡體   English   中英

我不知道如何填充數組

[英]I can't figure out how to fill an array

我試圖用傳入的值填充給定的數組,所以如果我想讓數組全部為12,則只需將所有元素替換為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的限制相同。

代表相對於第一個元素的偏移量的變量i應該從零開始:

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

這就是真正的男人™。 大聲抱歉,我無法抗拒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM