2014-03-27 92 views
0

我想填充一個給定的數組傳遞的值,所以如果我想要一個數組是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 *結尾與T *結尾相同。我不熟悉通過傳入數組的方式。

我是想的東西是這樣的:

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

我不能使用標或循環用於這項任務也,是的#include關閉用相同的std ::載體的限制。

+0

for循環是不允許的,但你可以使用while循環?..怪異的 – JoeC

+0

@JoeC不需要'for'(雙關語意思);)... –

回答

1

可變i,其表示相對於所述第一元件的偏移量,應以零開始:

int i = 0; 

循環條件爲檢查數組元素的是否等於最後數組元素的值爲

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

正確版本是以下內容:

while(left + i != end) 

,檢查如果指針(left + i)已到達結尾。

+0

不需要額外的偏移量變量和操作。 .. –

+2

更簡潔,'while(left!= end)* left ++ = fill;' –

+0

他沒有要求最簡單的解決方案,所以這只是一個看起來最接近他原來的意圖的工作。 – Rufflewind

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