初学者,但在网上找不到答案。。有哪位好心人能帮我看看,不甚感激
template<int SIZE> int(&a)[SIZE] insertSort(int(&arr)[SIZE]) { return arr; }; void main() { int arr[] = {2,4,56,65,3,6,9,4,3,5,8,4,2,1,0}; insertSort(arr);//提示找不到insertSort函数,如果将函数的返回值修改一下,编译就能通过 }
小伙看你根骨奇佳,潜力无限,来学PHP伐。
你的函數寫法也有問題,stackoverflow找一個答案,親測可運行
template<size_t n> int (&insertSort(int (&arr)[n]))[n] { return arr; }
http://stackoverflow.com/a/2302395
順便叨逼一句,盡量不要這麼做
void sort(const int *arr, int *sortedArr)
vector
第一行是這樣的:template<int SIZE>
<int SIZE>
既然是使用的C++,這裡是可以不用指標做到類型安全的。如 @wangdai 說的vector。至於返回,賦值什麼的這些都不需要管,最簡單的直接使用out参数
C++
out参数
#include <vector> #include <utility> #include <iostream> template<class t> void insert_sorter(std::vector<t>& array /* out */) { /// ... array[3] = 0xff; } int main() { std::vector<int> array = {1, 2, 3, 4, 5}; insert_sorter(array); std::cout << array.at(3) << std::endl; }
當然,如果你必須透過返回來到達高比格的效果,那就這樣
#include <vector> #include <utility> #include <iostream> template<class t> std::vector<t> insert_sorter(std::vector<t>& array) { /// ... array[3] = 0xff; /// move 语义不会重复拷贝array的data数据 return std::move(array); } int main() { std::vector<int> array = {1, 2, 3, 4, 5}; /// 这里使用了完美的移动赋值操作,是不是比`C`的方式顺眼多了 /// 不过要记住array后面不能再使用了 std::vector<int> ret = insert_sorter(array); std::cout << ret.at(3) << std::endl; }
老實說,正統的C++方式應該是
/// 按stl的范式实现自己的sort std::sort(s.begin(), s.end(), [](int a, int b) { return b < a; });
你的函數寫法也有問題,stackoverflow找一個答案,親測可運行
順便叨逼一句,盡量不要這麼做
void sort(const int *arr, int *sortedArr)
vector
第一行是這樣的:template
<int SIZE>
既然是使用的
C++
,這裡是可以不用指標做到類型安全的。如 @wangdai 說的vector
。至於返回,賦值什麼的這些都不需要管,最簡單的直接使用out参数
當然,如果你必須透過返回來到達高比格的效果,那就這樣
老實說,正統的
C++
方式應該是