2017-08-28 25 views
0
int[] a = {1,2,3}; 
int* b = new int[3]{4,5,6}; 

我想獲得b的開始和結束。 std::begin()a中工作,但不在b中。有沒有合適的方法來獲得b的兩個職位?如何獲取由新創建的數組的開始和結束

+3

我不鼓勵你使用裸體新的。改用'array'或'vector'。 –

+2

你沒有追索權,只能跟蹤緩衝區大小(那裏有3個)。最好寫一個這樣的課程。嘿,你聽說過'std :: vector'嗎? – StoryTeller

+0

如果你堅持使用常規數組,你必須跟蹤元素的數量或者做一些類似於空終止字符串的東西,在這裏你使用一些永遠不會出現在你的普通數據中的值來標記數組的末尾,然後遍歷數組,直到達到此特殊值。 – Matt

回答

2

如果您看到對std::beginstd::end的引用,您會看到開始和結束迭代器指向容器第一個和最後一個元素的指針。對於數組來說,這是非常真實的,因爲那樣你可以爲迭代器使用實際的指針。

對於數組像astd::begin函數返回一個指針到第一元件,並且std::end函數返回一個指針一個超出最後元件

現在,當您知道這些信息時,很容易找出指針的「開始」和「結束」迭代器,因爲它與數組完全相同。即指向第一個和最後一個元素的指針。

在你的例子中,「begin iterator」僅僅是b(因爲它指向第一個元素),而「end iterator」是b + 3,它是指向最後一個元素之外的指針。

+0

恩,是不是隻是爲std :: array包裝,不是實際的c樣式數組? – Matt

+0

@Matt ['std :: array'](http://en.cppreference.com/w/cpp/container/array)迭代器是隨機訪問迭代器,可以使用普通指針實現,但它們不會不得不。對於普通的C風格的數組,實現很可能是指針,因爲它是最簡單的。 –

+0

你不能在指針上使用'std :: begin'。有一個知道它的大小的數組引用的重載,但這不適用於普通指針。 –

相關問題