VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 29182|回复: 132

VC驿站 - C++学习资料集合帖(9月27日)

  [复制链接]
83_avatar_middle
online_vip 发表于 2009-9-27 19:47:56 | 显示全部楼层 |阅读模式
VC驿站

大家好~很高兴打击来到 VC驿站 - WwW.CcTry.CoM 为了大家能更好的交流,学习,VC驿站 特开设 QQ技

术交流群:

CcTry.CoM-技术交流[1]:84780266

有兴趣、并支持我们 VC驿站 的朋友可以加入!<请大家不要重复加入!>


①楼:   C++电子书

②楼:   C++视频教程

③楼:   C++资料整理

④楼:   C++练习代码

评分

参与人数 2 +15 收起 理由
49_avatar_small Rainsmiling + 10
08_avatar_small 一路心语001 + 5

查看全部评分





上一篇:CSDN VC编程经验总结
下一篇:VC编程实现IE风格的界面
83_avatar_middle
ico_lz  楼主| 发表于 2009-9-27 19:52:17 | 显示全部楼层

VC驿站 - C++电子书整理

本帖最后由 隨風∞流逝 于 2009-9-27 20:11 编辑

-----------------------------------------------------------------------------------------------------------------------------------------

学习C++从入门到精度的的十本最经典书籍

C/C++ 语言参考 - Chm

C++编程艺术
目录
第一章  C++的功能..........1
第二章  简单的C++垃圾回收器
...........................5
第三章  C++中的多线程.....54
第四章  C++的扩展.........98
第五章  Internet文件下载工具
.........................131
第六章  使用C++的财务计算
.........................154
第七章  基于AL的问题求解
.........................164
第八章  定制STL容器......208
第九章  Mini C++解释程序
.........................246


北大青鸟C++课件

易学C++图书+及源码

C++ Primer 第三版 中文+英文+原书代码_高清pdf

C++标准程序库-自修教程与参考手册 中文+英文版 - pdf

C++大学教程+(第二版)(CHM).rar



CC++_语言参考(中文).CHM

C++ STL中文版 - pdf

C++ Primer 第四版中英文对照 chm

c++builder6编程实例精讲

C++沉思录 中文 pdf

C++数据结构课件-C++常用算法设计-C++程序设计实验指导与实训

高质量 C++、C 编程指南 - pdf

字符串处理函数大全 - pdf

C++常用算法 数据结构各种算法实现

C++:改善程序技术与设计思维的55个有效做法(第三版)(中文版) - pdf

c++编程思想(经典!)
83_avatar_middle
ico_lz  楼主| 发表于 2009-9-27 20:15:31 | 显示全部楼层
83_avatar_middle
ico_lz  楼主| 发表于 2009-9-27 20:35:00 | 显示全部楼层
83_avatar_middle
ico_lz  楼主| 发表于 2009-9-27 20:44:31 | 显示全部楼层

VC驿站 - C++基础代码总结

  1. --------------------------------------------------------------------------------
  2. 高精运算:
  3. typedef struct //为方便处理,用结构体
  4. {
  5.         int len ;
  6.         long num [1024] ;
  7. } HNum ;
  8. //万进制高精加法, 注意输出高位补0,  printf ("%04d" …) ;
  9. void HPlus (HNum &a, HNum &b, HNum &c)
  10. {
  11.         int i, len = a.len > b.len ? a.len : b.len ;
  12.         memset (&c, 0, sizeof (HNum)) ;
  13.         for (i = 1 ; i <= len ; i ++)
  14.         {
  15.                 c.num [i] += a.num [i] + b.num [i] ;
  16.                 if (c.num [i] >= BASE)
  17.                 {               
  18.                         c.num [i+1] += c.num [i] / BASE ;
  19.                         c.num [i] %= BASE ;
  20.                 }
  21.         }
  22.         c.len = len ;  
  23.         while (c.num [c.len+1] > 0)
  24.                 c.len ++ ;
  25. }
  26. //万进制高精乘法
  27. void HMul (HNum &a, HNum &b, HNum &c)
  28. {
  29.          int i, j ;
  30.          memset (&c, 0, sizeof (HNum)) ;
  31.          for (i = 1 ; i <= a.len ; i ++)
  32.                   for (j = 1 ; j <= b.len ; j ++)
  33.                   {
  34.                            c.num [i+j-1] += a.num [i] * b.num [j] ; //注意+号
  35.                            if (c.num [i+j-1] >= BASE)
  36.                            {
  37.                                      c.num [i+j] += c.num [i+j-1] / BASE ; //注意+号
  38.                                      c.num [i+j-1] %= BASE ;
  39.                            }
  40.                  }
  41.       c.len = a.len + b.len - 1 ;
  42.       while (c.num [c.len+1] > 0) //
  43.                       c.len ++ ;
  44. }
  45. //万进制高精减法
  46. void HSub (HNum &a, HNum &b, HNum &c)
  47. {
  48.         int i, len = a.len  ;  //保证a >= b
  49.         memset (&c, 0, sizeof (HNum)) ;
  50.         for (i = 1 ; i <= len ; i ++)
  51.         {
  52.                 c.num [i] += a.num [i] - b.num [i] ; //注意+号
  53.                 if (c.num [i] < 0)
  54.                 {
  55.                         c.num [i+1] -= 1 ; //注意-号
  56.                         c.num [i] += BASE ;
  57.                 }
  58.         }
  59.         c.len = len ;
  60.         while (c.len > 0 && c.num [c.len] == 0)
  61.                         c.len -- ;
  62. }
  63. //万进制高精减法, 直接就 long long….
  64. --------------------------------------------------------------------------------
  65. //Fibonacci, Fibo [i] = Fibo [i-1] + Fibo [i-2],  Fibo [3] = 3 ;  

  66. // Catalan数列S[n] = C(2n,n)/(n+1)
  67. long Catalan (long n)
  68. {
  69.         long i, x, y ;
  70.         x = y = 1 ;
  71.         for (i = 2 ; i <= n ; i ++)
  72.                         x *= i ;
  73.         for (i = n ; i <= 2*n ; i ++)
  74.                         y *= i ;
  75.         return y/x/(n + 1) ;  
  76. }
  77. //最小公倍数
  78. long lcm (long a, long b)
  79. {
  80.         return a*b/gdc (a, b) ;
  81. }
  82. //最大公约数, 辗转相除法
  83. long gdc (long a, long b)
  84. {
  85.         return (a%b == 0)? b : gdc (b, a%b) ;  
  86. }
  87. ------------------------------------------------------------------------------------------------------------
  88. //堆操作
  89. void In (HeapDT dt) //进堆
  90. {
  91.         int i ;
  92.         list [++ len] = dt ;
  93.         i = len ;
  94.         while (i > 1) //向上调整
  95.         {
  96.                 if (list [i].w < list [i/2].w)
  97.                         Swap (i, i/2) ;
  98.                 else
  99.                         break ;
  100.                 i /= 2 ;
  101.         }
  102. }
  103. HeapDT Out () //出堆
  104. {
  105.         HeapDT ret = list [1] ;
  106.         Swap (1, len) ;  //NOTE: 最重要的一步, 最后(最大)一个元素与第一个元素交换
  107.         len -- ;                 //堆长度减1       
  108.         int i, pa = 1 ;
  109.         for (i = pa * 2 ; i <= len ; i *= 2) //向下调整
  110.         {
  111.                 if (i < len && list [i+1].w < list [i].w)
  112.                         i ++ ;
  113.                 if (list [i].w < list [pa].w)
  114.                         Swap (pa, i) ;
  115.                 else
  116.                         break ;
  117.                 pa =  i ;
  118.         }
  119.         return ret ;
  120. }
  121. ------------------------------------------------------------------------------------------------------------
  122. //二分查找, 注意等号
  123. while (low < high)
  124.         {
  125.               mid = (low + high) >> 1 ;  
  126.                   if (strcmp (spname, name [mid]) <= 0)
  127.                         high = mid ;
  128.                   else
  129.                     low = mid + 1 ;
  130.         }
  131. ------------------------------------------------------------------------------------------------------------
  132. //快排
  133. void QSort (int low, int high)
  134. {
  135.         int l, r ;
  136.         Milkcow p = cow [low] ;
  137.         l = low, r = high ;
  138.         while (l < r)
  139.         {
  140.                 while (l < r && cow [r].price >= p.price)
  141.                         r -- ;
  142.                 cow [l] = cow [r] ;
  143.                 while (l < r && cow [l].price <= p.price)
  144.                         l ++ ;
  145.                 cow [r] = cow [l] ;
  146.         }
  147.         cow [l] = p ;
  148.         if (l-1 > low)
  149.                 QSort (low, l-1) ;
  150.         if (l+1 < high)
  151.                 QSort (l+1, high) ;
  152. }
  153. --------------------------------------------------------------------------------------------
  154. //优化并查集
  155. int FindSet (int i)
  156. {
  157.          if (Parent [i] != i) //状态压缩
  158.                  Parent [i] = FindSet (Parent [i]) ;
  159.             return Parent [i] ;
  160. }
  161. void UnionSet (int a, int b)
  162. {
  163.          int i, j ;
  164.          i = FindSet (a) ;
  165.          j = FindSet (b) ;
  166.          if (i != j)
  167.                  if (Rank [i] > Rank [j]) //启发式合并:让深度较小的树成为深度较大的树的子树
  168.                     Parent [j] = i ;
  169.             else
  170.             {
  171.                             Parent [i] = j ;
  172.                           if (Rank [i] == Rank [j])
  173.                                   Rank [j] ++ ;           
  174.                  }
  175. }
  176. -------------------------------------------------------------------------------------------
  177. 图论:
  178. //MST
  179. double Kruscal ()
  180. {
  181.         int i, k = 0 ;
  182.         double s = 0 ;
  183.         for (i = 0 ; i <= n ; i ++)
  184.                 Parent [i] = i ;
  185.         for (i = 0 ; i < m && k < n-1; i ++) //m为总边数
  186.         {
  187.                 if (FindSet (Edge [i].a) != FindSet (Edge [i].b))
  188.                 {
  189.                         s += Edge [i].v ;
  190.                         if (s > S) //是否超出范围
  191.                                 return 0 ;
  192.                         UnionSet (Edge [i].a, Edge [i].b) ;
  193.                         k ++ ; //记录合并的边数
  194.                 }
  195.         }
  196.         if (k != n-1)
  197.                 return 0 ;
  198.         return s ;
  199. }
  200. int Prim (int s)
  201. {
  202.         int mstlen, min, imin, i, j ;
  203.         int closedge [MAX] = {0} ; //保存与MST集合邻接的边
  204.        
  205.         mstlen = 0 ;
  206.         for (i = 0 ; i < N ; i ++)
  207.                 closedge [i] = INFINITE ;
  208.        
  209.         for (i = 0 ; i < N ; i ++)
  210.                 if (G [s][i] != INFINITE)
  211.                         closedge [i] = G [s][i] ;  
  212.         imin = s ;
  213.         closedge [imin] = 0 ;
  214.         for (i = 0 ; i < N ; i ++)
  215.         {
  216.                 min = INFINITE ;
  217.                 for (j = 0 ; j < N ; j ++) //找与MST集合邻接最小的边
  218.                         if (closedge [j] && closedge [j] < min)
  219.                         {       
  220.                                 imin = j ;
  221.                                 min = closedge [j] ;
  222.                         }
  223.                 mstlen += closedge [imin] ;
  224.                 closedge [imin] = 0 ;  //并入MST集合
  225.                 for (j = 0 ; j < N ; j ++) //跟新邻接边
  226.                         if (G [imin][j] != INFINITE && G [imin][j] < closedge [j])
  227.                                 closedge [j] = G [imin][j] ;
  228.         }
  229.         return mstlen ;
  230. }
  231. ------------------------------------------------------------------------------------------------------------
  232. //最短路径:
  233. //Bellman + Queue
  234. //note:队列版不能做change的优化
  235. //用队列和邻接表改进Bellman_Ford算法=> Spfa算法
  236. int Bellman_Ford_Spfa (int s)
  237. {
  238.          int i, n ;
  239.      //初始化
  240.      for (i = 0 ; i <= P ; i ++)
  241.          DIST [i] = INFINITE ;
  242.      DIST [s] = 0 ;
  243.      
  244.      CQueue Q ;
  245.          int p, nextp, tmp ;
  246.          bool INQ [PMAX] = {0} ; //判断是否已经在队列内
  247.          
  248.      Q.EnQueue(s) ;  //原点入队列
  249.          while (! Q.IsEmpty ())
  250.          {
  251.          p = Q.OutQueue() ;
  252.                  INQ [p] = false ;
  253.                  
  254.                  //遍历队列出来这个节点的所有邻接点
  255.                  for (i = 1 ; i <= CONN [p][0] ; i ++)
  256.                  {
  257.                            nextp = CONN [p][i] ;  
  258.                            tmp = DIST [nextp] ;
  259.                            Relax (p, nextp , G [p][nextp]) ;
  260.                      if (DIST [nextp] != tmp && ! INQ [nextp])
  261.                      {
  262.                           Q.EnQueue(nextp) ;
  263.                           INQ [nextp] = true ;
  264.                      }          
  265.                  }
  266.          }
  267.         return ….
  268. }
  269. //DIJ + 小顶堆
  270. int DIJ (int v0)
  271. {
  272.         int i, vmin, min, vnext ;
  273.         bool PASSED [PMAX] = {false} ;
  274.        
  275.         for (i = 1 ; i <= P ; i ++)
  276.                 DIST [i] = INFINITE ;  
  277.     HeapDT hdt ;
  278.     CMinHeap heap ;
  279.     //源点先进堆
  280.     hdt.v = v0 ;
  281.     hdt.w = 0 ;
  282.     heap.In (hdt) ;
  283.     DIST [v0] = 0 ;
  284.         while (! heap.IsEmpty ())
  285.         {
  286.          hdt = heap.Out () ; //堆顶出堆,即DIST [v]最小的那个, 栈自动调整
  287.                 vmin = hdt.v ;
  288.                 min = hdt.w ;  
  289.                 PASSED [vmin] = true ;
  290.                  for (i = 1 ; i <= CONN [vmin][0] ; i ++)  //遍历邻接点
  291.                  {
  292.                          vnext = CONN [vmin][i] ;
  293.                         if (! PASSED [vnext] && min + G [vmin][vnext] < DIST [vnext]) //松弛
  294.                 {
  295.                                            DIST [vnext] = min + G [vmin][vnext] ;
  296.                                            hdt.v = vnext ;
  297.                                            hdt.w = DIST [vnext] ;
  298.                                            heap.In (hdt) ;        //进队,并向上自动调整
  299.                     }
  300.                 }
  301.         }       
  302.     return … ;
  303. }
  304. //Floyed, 传递闭包(a>b, b>c, to a>c)
  305. void Floyed ()
  306. {
  307.          int i, j, k ;
  308.          for (k = 0 ; k < N ; k ++)
  309.             for (i = 0 ; i < N ; i ++)
  310.                     for (j = 0 ; j < N ; j ++)
  311.                     {
  312. if (G [i][j] > G [i][k] + G [k][j])
  313.                                     G [i][j] = G [i][k] + G [k][j] ;
  314.                 }
  315. }               
  316. --------------------------------------------------------------------------------------------
  317. //欧拉回路, 按节点序号递增删边, 如果没此要求可用邻接表
  318. void FindCircuit (int v)
  319. {
  320.         if (! FENCE [v][0])
  321.         {
  322.                 STACK [++ STACK [0]] = v ; //节点度为, 入栈
  323.         }
  324.         else
  325.         {
  326.                 int i ;
  327.                 //遍历邻接点
  328.                 for (i = 1 ; i <= NMAX && FENCE [v][0] ; i ++)//NOTE: 按节点序号递增删边
  329.                 {
  330.                         if (FENCE [v][i])
  331.                         {
  332.                             //删除遍历到的边
  333.                                 FENCE [v][i]  -- ;
  334.                                 FENCE [i][v] -- ;
  335.                                 FENCE [v][0] -- ;
  336.                                 FENCE [i][0] -- ;
  337.                                 //邻接点再调用欧拉回路搜索
  338.                                 FindCircuit (i) ;
  339.                         }
  340.                 }
  341.                 STACK [++ STACK [0]] = v ;
  342.         }
  343. }
  344. --------------------------------------------------------------------------------------------
复制代码

评分

参与人数 2威望 +10 驿站币 +40 +30 收起 理由
62_avatar_small mickeymouse + 10 + 10
01_avatar_small admin + 10 + 30 + 20 多谢支持!

查看全部评分

01_avatar_middle
online_admins 发表于 2009-9-27 20:53:18 | 显示全部楼层
感谢楼主的辛勤劳动!大家好好学啊,要对得起楼主的劳动果实啊!VC驿站 - C++学习资料集合帖(9月27日)
62_avatar_middle
online_vip 发表于 2009-9-27 23:23:51 | 显示全部楼层
是啊,感谢楼主的无私奉献。。。VC驿站 - C++学习资料集合帖(9月27日)
20_avatar_middle
在线会员 发表于 2009-9-28 14:18:58 | 显示全部楼层
顶上,谢谢楼主!
16_avatar_middle
在线会员 发表于 2009-9-28 23:49:23 | 显示全部楼层
VC驿站 - C++学习资料集合帖(9月27日) 听多了的啊!
69_avatar_middle
在线会员 发表于 2009-10-2 09:00:32 | 显示全部楼层
谢谢楼主的总结!!!!
81_avatar_middle
在线会员 发表于 2009-10-2 10:49:20 | 显示全部楼层
恩   感谢楼主的分享!!!  顶下哈!!!!
25_avatar_middle
在线会员 发表于 2009-10-11 17:05:35 | 显示全部楼层
恩   感谢楼主的分享!!!  顶下哈!!!!
30_avatar_middle
在线会员 发表于 2009-10-11 21:10:05 | 显示全部楼层
谢谢楼主的无私分享
49_avatar_middle
在线会员 发表于 2009-10-11 22:05:33 | 显示全部楼层
谢谢LZ无私奉献
53_avatar_middle
在线会员 发表于 2009-10-14 08:44:50 | 显示全部楼层
想哭了……  感谢楼主!!!!!!
48_avatar_middle
在线会员 发表于 2009-10-22 00:00:06 | 显示全部楼层
支持!!!
89_avatar_middle
在线会员 发表于 2009-10-23 10:25:23 | 显示全部楼层
好多的资料啊,太感谢了!感动啊~
11_avatar_middle
在线会员 发表于 2009-10-29 18:57:38 | 显示全部楼层

唱卡拉OK

“歌王”哈利在卡拉OK厅唱罢一曲,回到座位兴奋地对朋友说:“我

唱得如何?”

朋友说:“唱得很好,不过,不唱更好。”










  治疗糖尿病并发症  糖尿病足部 高渗性非酮症糖尿病昏迷 糖尿病性脂肪肝 空腹血糖高
10_avatar_middle
在线会员 发表于 2009-11-17 22:06:30 | 显示全部楼层
很COOL的总结帖子···
32_avatar_middle
在线会员 发表于 2009-12-5 02:13:56 | 显示全部楼层
好东西啊,一定会好好学习
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-23 17:46

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表