比这篇新的文章: unicode各种编码格式之间的转换(utf8,utf16, utf32)
比这篇旧的文章: 一个引用计数实现的字符串类kstring

一些工具模板函数

语言: C++, 标签: 冒泡排序 string转换 二分查找 插入排序 2009/06/28发布 8个月前更新 更新记录
作者: doorfly, 点击174次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
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 }


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论