2015-05-02 57 views
1

我想知道我的數組填充了什麼索引。我知道一種方法,我將在循環內部維護一個臨時變量,並將保持它的更新,最終確定它的大小。確定數組索引至哪個數組被填充?

我想知道,除了這種方法是他們的任何其他方式來完成這項任務?最好是O(1)(如果可能的話)或者比O(n)更好的東西。

+0

我假設你的意思是「從第零個連續填充」索引?您可以將數組元素初始化爲一個哨兵值,然後從零開始計算填充了多少個元素。爲什麼要跟蹤一個臨時變量不夠好?你究竟在努力完成什麼?從技術上講,有很多很多方法可以做到,儘管許多方法效率不高。 –

+1

@i_am_jorf這將是一個O(n)的解決方案。如果我錯了,請更正我 –

+1

是的,是嗎?你沒有指定你想要多快。你的問題過於模糊。 –

回答

2

沒有通用的方法來做到這一點作爲一個數組的所有元素始終包含值。

夫婦共同的方式來處理:

  • 「有效」的元素自己作爲你在後建議的跟蹤。
  • 有標記「missing」值的sentinel元素並檢查每個元素 - 具有這個值的第一個元素將標記爲「填充數組的末尾」。對於參考類型,您可以使用null,對於其他類型,有時會有一些特殊值很少使用,可以將其視爲「缺失」 - 即整數類型的最大值。

第二種方法是這樣的C風格的字符串來實現 - 這是人物達到0字符數組 - 讓你隨時可以計算一個字符串的長度,即使它被存儲在字符的長陣。

+0

我認爲現在我會選擇第一個天真的方式,在獲得基礎知識後,我會盡力實施第二種方式。謝謝你:)並且抱歉我的英語不好 –

+0

當然是+1這樣一個很好的答案:) :) :) –

+2

你可以添加這個回答:http://en.cppreference.com/w/cpp/container/array/size –

2

會這樣嗎?

size_t size_of_array = sizeof(array)/sizeof(array[0]); 

類似的東西,並做更正語法:)

+0

這告訴你數組有多大,而不是有多少元素被「填充」。 –

+0

@hg_git我認爲它會告訴陣列的總大小,即空+填充 –

+0

數組用指針表示,所以當你做'sizeof(array)'時,你得到指針的大小 – smac89