回答
你可以讓你的函數模板,給你的陣列的尺寸手柄:
template <size_t N>
int mysort(int (&a)[N])
{
/// access as a[n], where n is in range [0,N)
}
但更地道的方式,因爲它也有工作標準庫容器和動態大小的數組,將通過兩個迭代器:
template<typename Iterator>
int mysort(Iterator begin, Iterator end) { ... }
T母雞
int arr[] = {1,54,3,7,9,87};
mysort(arr);
mysort(std::begin(arr), std::end(arr));
請記住我的名字改爲mysort
因爲標準庫中有一個著名的算法稱爲std::sort
。
請注意,對於動態分配的數組,std :: end不能很好地工作,因爲C++中的數組通常不知道它們的長度。 ('std :: end(real_array_not_a_pointer)'只能用,因爲編譯器看到你將該變量聲明爲一個特定大小的數組)。所以你必須通過'begin'和'begin + size'。但是,查找「開始+大小」當然需要在某個時刻知道「大小」。 – cHao
@cHao正確。當然,第一種選擇也不行。 – juanchopanza
最習慣的方法是定義一個函數,它接受兩個迭代器:
template<typename Iter>
int sort(Iter first, Itera last);
在羅馬,入鄉隨俗做(「羅馬」 =標準庫)。
使用指針:
int sort(int* a, int n)
如果您想使用該結構,您需要一些方法來確定數組的末尾。例如,字符串作爲char數組使用空終止符。如果你沒有辦法確定結構的結尾,你將無法安全地迭代它。
指針方法將允許您遍歷數組,但是您將無法在迭代時安全地確定數組的末尾。
int sort(int* arr)
{
// do your sorting here
}
有一些標記數組末尾的元素。這就是大多數字符串操作的工作方式,字符串的末尾用'\ 0'標記。
儘管如此,理想情況下,您不會傳遞一個普通數組,但會傳遞一些更高級別的對象,如std::vector
或std::array
。
編譯器會忽略數組參數的大小,因爲當您將數組傳遞給函數時,它將轉換爲指針。事實上,
int sort(int a[], int n)
相當於
int sort(int* a, int n)
陣列的大小將是未知的,直到運行時間和應作爲第二個參數被傳遞。
你不能完全按照你所要求的。我想最接近的將是使用std::vector<int>
int sort(std::vector<int>& a)
{
...
}
std::vector
支持所有常見的數組操作(a[i]
等。)再加上幾個,如a.size()
以獲得矢量的大小。
- 1. C編譯器如何處理不同的主函數定義?
- 2. 在JS中如何處理參數定義函數
- 3. 如何處理由類定義的數組的數組
- 4. 如何在C函數中定義一個數組?
- 5. 如何在jQuery函數處理函數處理工作
- 6. C#如何處理回調函數
- 7. 構造函數沒有定義[處理]
- 8. 如何在C++中定義數組
- 9. OpenMP如何處理C中的數組?
- 10. jQuery處理未定義的數組值
- 11. 如何處理json對象或數組?
- 12. C:定義的長數組作爲在C#中的函數
- 13. 如何從函數中定義的信號處理函數返回控件?
- 14. 用於生成函數名稱的C預處理器定義
- 15. 如何處理LISTAGG()函數
- 16. 如何在複製控制函數中處理C++數組成員?
- 17. 如何理解Wordpress自定義函數?
- 18. SQL如何處理用戶定義函數中的異常?
- 19. 如何處理架構更新上的自定義sql函數?
- 20. 如何通過預處理器定義獲得函數簽名?
- 21. 如何在JavaScript對象內正確定義(函數||函數)?
- 22. 在函數處理函數中使用數組參數
- 23. 這個Javascript事件處理函數參數在哪裏定義?
- 24. 如何處理數組中的數組?
- 25. 放置在綁定事件處理函數中時未定義的函數
- 26. 如何使用自定義JsonSerializerSettings處理數組創建?
- 27. 如何在自定義jQuery函數中創建數組數據?
- 28. JavaScript:如何處理數組作爲函數參數?
- 29. 如何處理數組
- 30. 如何處理大數組?
儘管它看起來像,該函數不採取預定義長度的陣列 –
目前還不清楚,如果您認爲這需要一個特定的長度,並且您希望它採取可變長度或其他方式。 –