我現在有一個大腦放屁,我正在尋找一種快速方法來獲取數組並將其中一半傳遞給函數。如果我有十個元素的數組A,在某些語言中,我可以將A [5:]這樣的東西傳遞給函數並完成它。在C++中是否有類似的構造?顯然,我想避免和排序循環功能。C++中有從數組中獲取子數組的方法嗎?
7
A
回答
7
是的。在普通的C中使用指針,但在C++中,可以使用任何類型的迭代器(指針可以被視爲迭代器)。
template<typename Iter>
void func(Iter arr, size_t len) { ... }
int main() {
int arr[10];
func(arr, 10); // whole array
func(arr, 5); // first five elements
func(arr + 5, 5); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.size()); // All elements
func(vec.begin(), 5); // first five
func(vec.begin() + 5, vec.size() - 5); // all but first 5
return 0;
}
典型訣竅是將指針傳遞到所述陣列的所述第一元件,然後使用單獨的參數來傳遞數組的長度。不幸的是,沒有界限檢查,所以你必須小心地把它弄清楚,否則你會記憶猶新。
您也可以使用半開範圍。這是最常見的方式。標準庫中的許多功能(如std::sort
)都以這種方式工作。
template<class Iter>
void func(Iter start, Iter end) { ... }
int main() {
int arr[10];
func(arr, arr + 10); // whole array
func(arr, arr + 5); // first five elements
func(arr + 5, arr + 10); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.end()); // whole vector
func(vec.begin(), vec.begin() + 5); // first five elements
func(vec.begin() + 5, vec.end()); // all but the first five elements
return 0;
}
再次,沒有邊界檢查。
相關問題
- 1. 有從數組中獲取浮點數的簡寫方法嗎?
- 2. php從數組中獲取子數組
- 3. 從C#方法獲取數組結果
- 4. 有沒有辦法從C#中的多維數組中獲取數組?
- 5. (C++)如何從數組中獲取沒有嵌套循環的子數組?
- 6. 如何從VB.NET中的大數組中獲取子數組?
- 7. 如何從PHP中的數組中獲取「子數組」?
- 8. 從數組中獲取數組的值?
- 9. 從2D double [] []數組獲取子數組
- 10. 從C中的多維數組中獲取列的有效方法是什麼?
- 11. 獲取JSON數組從C#中的LINQ
- 12. 無法從數組中獲取數據
- 13. 無法從數組中獲取數據
- 14. 從數組中獲取子類
- 15. 從JSON獲取子數組
- 16. c#從數組中獲取最小值
- 17. 從數組或列表中獲取所有方法
- 18. 從數組c獲取maxAbs#
- 19. 獲取索引映射數組的子數組的有效方法
- 20. 是從數據庫中獲取數據的有效方法嗎?
- 21. 如何從數組中獲取子數組?
- 22. 從C中讀取數組#
- 23. 從數組中獲取CGRect
- 24. 從Parse中獲取數組
- 25. 從數組中獲取MongoId
- 26. 從數組中獲取值
- 27. 從數組中獲取值
- 28. 從strings.xml中獲取數組
- 29. 無法從數組中獲取值
- 30. 如何從數組數組中獲取有關子序列的信息?
也許你的函數應該使用迭代器。 – chris
您不能將數組傳遞給C++中的函數,因爲C++沒有數組值。那麼你的功能實際上是什麼? – melpomene
我會有一個數組int [] a = {1,2,3,4,5,6,7,8,9,10}。然後,我正在尋找一種方法來獲取子數組int [] a1 = {6,7,8,9,10}。 –