比这篇新的文章:
unicode各种编码格式之间的转换(utf8,utf16, utf32)
比这篇旧的文章: 一个引用计数实现的字符串类kstring
作者: doorfly, 点击174次, 评论(0), 收藏者(0), , 打分:
所有评论,共0条:( 我也来说两句)
比这篇旧的文章: 一个引用计数实现的字符串类kstring
一些工具模板函数
语言: C++, 标签: 冒泡排序 string转换 二分查找 插入排序 2009/06/28发布 8个月前更新 更新记录作者: doorfly, 点击174次, 评论(0), 收藏者(0), , 打分:
C++语言: 一些工具模板函数
001 #include <string>
002 #include <sstream>
003
004
005 //
006 //string类和其它类型的转换
007 //
008
009 template <typename T>
010 inline std::string& ObjectToString(T val, std::string& str)
011 {
012 std::ostringstream strm;
013 strm << val;
014 str = strm.str();
015 return str;
016 }
017
018 template <typename T>
019 inline T StringToObject(T& val, std::string& str)
020 {
021 std::istringstream strm(str);
022 strm >> val;
023 return val;
024 }
025
026
027 //
028 //冒泡排序
029 //
030 template <typename T, size_t LEN>
031 void bubble_sort(T (&arr)[LEN])
032 {
033 for (size_t m = 0; m < LEN - 1; ++m)
034 {
035 for (size_t n = 0; n < LEN - m - 1; ++n)
036 {
037 if(arr[n+1] < arr[n])
038 {
039 swap(arr[n], arr[n+1]);
040 }
041 }
042 }
043 }
044
045 template<typename T>
046 void bubble_sort(T* array, size_t Len)
047 {
048 for (size_t m = 0; m < Len - 1; ++m)
049 {
050 for (size_t n = 0; n < Len - m - 1; ++n)
051 {
052 if (array[n+1] < array[n])
053 swap(array[n], array[n+1]);
054 }
055 }
056 }
057
058 //
059 //插入排序
060 //
061 template <typename T>
062 void insert_sort(T (&array)[LEN])
063 {
064 for (size_t n = 0; n < LEN; ++n)
065 {
066 T temp = array[n];
067 size_t j = n;
068 for (; j > 0 && temp < array[j-1]; --j)
069 {
070 array[j] = array[j-1];
071 }
072 array[j] = temp;
073 }
074 }
075
076 template<typename T>
077 void insert_sort(T* pArray, size_t nLen)
078 {
079 for (size_t n = 0; n < nLen; ++n)
080 {
081 T tmp = pArray[n];
082 size_t j = n;
083 for (; j > 0 && tmp < pArray[j-1]; --j)
084 {
085 pArray[j] = pArray[j-1];
086 }
087 pArray[j] = tmp;
088 }
089 }
090
091 //
092 //二分查找
093 //
094 template <typename T, size_t LEN>
095 const T* binary_find(const T (&array)[LEN], const T& key)
096 {
097 int end = LEN;
098 int begin = 0;
099 int mid = 0;
100
101 while (begin < end)
102 {
103 mid = (begin + end) / 2;
104
105 if (key < array[mid])
106 {
107 end = mid - 1;
108 }
109 else if (array[mid] < key)
110 {
111 begin = mid + 1;
112 }
113 else
114 {
115 return &array[mid];
116 }
117 }
118 return 0;
119 }
002 #include <sstream>
003
004
005 //
006 //string类和其它类型的转换
007 //
008
009 template <typename T>
010 inline std::string& ObjectToString(T val, std::string& str)
011 {
012 std::ostringstream strm;
013 strm << val;
014 str = strm.str();
015 return str;
016 }
017
018 template <typename T>
019 inline T StringToObject(T& val, std::string& str)
020 {
021 std::istringstream strm(str);
022 strm >> val;
023 return val;
024 }
025
026
027 //
028 //冒泡排序
029 //
030 template <typename T, size_t LEN>
031 void bubble_sort(T (&arr)[LEN])
032 {
033 for (size_t m = 0; m < LEN - 1; ++m)
034 {
035 for (size_t n = 0; n < LEN - m - 1; ++n)
036 {
037 if(arr[n+1] < arr[n])
038 {
039 swap(arr[n], arr[n+1]);
040 }
041 }
042 }
043 }
044
045 template<typename T>
046 void bubble_sort(T* array, size_t Len)
047 {
048 for (size_t m = 0; m < Len - 1; ++m)
049 {
050 for (size_t n = 0; n < Len - m - 1; ++n)
051 {
052 if (array[n+1] < array[n])
053 swap(array[n], array[n+1]);
054 }
055 }
056 }
057
058 //
059 //插入排序
060 //
061 template <typename T>
062 void insert_sort(T (&array)[LEN])
063 {
064 for (size_t n = 0; n < LEN; ++n)
065 {
066 T temp = array[n];
067 size_t j = n;
068 for (; j > 0 && temp < array[j-1]; --j)
069 {
070 array[j] = array[j-1];
071 }
072 array[j] = temp;
073 }
074 }
075
076 template<typename T>
077 void insert_sort(T* pArray, size_t nLen)
078 {
079 for (size_t n = 0; n < nLen; ++n)
080 {
081 T tmp = pArray[n];
082 size_t j = n;
083 for (; j > 0 && tmp < pArray[j-1]; --j)
084 {
085 pArray[j] = pArray[j-1];
086 }
087 pArray[j] = tmp;
088 }
089 }
090
091 //
092 //二分查找
093 //
094 template <typename T, size_t LEN>
095 const T* binary_find(const T (&array)[LEN], const T& key)
096 {
097 int end = LEN;
098 int begin = 0;
099 int mid = 0;
100
101 while (begin < end)
102 {
103 mid = (begin + end) / 2;
104
105 if (key < array[mid])
106 {
107 end = mid - 1;
108 }
109 else if (array[mid] < key)
110 {
111 begin = mid + 1;
112 }
113 else
114 {
115 return &array[mid];
116 }
117 }
118 return 0;
119 }
所有评论,共0条:( 我也来说两句)
代码
