1 #include <Windows.h> //默认写在最上方
2 #include <iostream> //输入输出流
3 #include <locale.h> //宽字符 显示的头文件 ,以及函数 setlocale(LC_ALL,"");
4
5 #include <vector> //STL
6 #include <list> //STL
7 #include <deque> //STL
8 #include <set> //STL
9 #include <map> //STL
10 #include <hash_map> //STL
11 #include <functional> //STL 函数对象
12 #include <algorithm> //STL 算法,大概有100多个算法
13
14 #include <string.h> //字符串
15 #include <cstring> //字符串
16 #include <string> //字符串
17
18 #include <bitset> //二进制头文件
19
20 #include <cstddef> //size_t的头文件
21
22 #include <xutility>
23
24 #include <stdio.h>
25 #include <math.h>
26 #include <stdlib.h>
27 #include <errno.h>
28 #include <sysinfoapi.h>
29
30
31
32
33
34 using namespace std;
35
36
37 #define Conn(x,y) x##y
38 #define ToChar(x) #@x
39 #define ToString(x) #x
40
41
42 class TestObject
43 {
44 public:
45 TestObject()
46 {
47 this->m_iData1 = 10;
48 this->m_iData2 = 20;
49 this->m_iData3 = 30;
50 }
51
52 private:
53 int m_iData1;
54 int m_iData2;
55 int m_iData3;
56 };
57
58
59 enum OpenModes
60 {
61 nInput,
62 nOutput,
63 nAppend,
64 nX = 1,
65 nY,
66 nZ = 2,
67 };
68
69 typedef struct Student
70 {
71 Student()
72 {
73 nAge = 0;
74 nLen = 0;
75 }
76
77 int nAge;
78 int nLen;
79 }Hello;
80
81 //前包,后不包..一定要注意 end的迭代器
82 bool FindInt(vector<int>::iterator begin, vector<int>::iterator end, int &nValue)
83 {
84 bool find = false;
85
86 while (begin != end)
87 {
88 if (*begin == nValue)
89 {
90 find = true;
91 break;
92 }
93 else
94 {
95 begin++;
96 }
97 }
98
99
100 if (find)
101 {
102 return true;
103 }
104 else
105 {
106 return false;
107 }
108
109
110 }//这个就有点像STL里面的 find()函数
111
112 void printt(int elem)
113 {
114 cout << elem << endl;
115 cout << "aaaa" << endl;
116 }
117
118
119 int& add_one(int &x)
120 {
121
122 ++x;
123 return x;
124
125 }
126
127 int AddThree(int *p)
128 {
129 *p = *p + 10;
130 return *p;
131
132 }
133
134 void printValue_5(int(*x)[10], int rowSize)
135 {
136 for (int i = 0; i != rowSize;i++)
137 {
138
139 for (int j = 0; j != 10;++j)
140 {
141 cout << x[i][j] << " ";
142 }
143 cout << endl;
144 }
145
146
147 }
148
149
150
151
152
153
154 class CBook
155 {
156
157 public:
158 int price;
159 int num;
160 int sum;
161
162 int GetPrice() const;
163
164
165 };
166
167
168 int CBook::GetPrice() const
169 {
170 int a = 1;
171 a = a + 10; //这个是可以进行写操作的
172
173
174 //this->num = 2;//const 放在()后面,说明,不允许修改this的数据.不能进行 写 操作
175
176
177 return 0;
178 }
179
180 CBook obj2;
181
182
183 //递归的实例
184 void DoA()
185 {
186 //cout << "Hello panzhengming" << endl;
187 //DoA();
188 }
189
190 long Factorial(int n)//阶乘
191 {
192 //数学定义0的阶乘是 1.这是基准
193
194 if ( 0 == n)
195 {
196 return 1;
197 }
198 else
199 {
200 return n * Factorial(n - 1);
201 }
202 }
203
204
205 int main(int argc,char **argv)
206 {
207 setlocale(LC_ALL, "");
208
209 /*
210 CBook obj;
211 obj.GetPrice();
212 cout << obj.sum << endl;//局部对象,未初始化的变量都是垃圾就数据
213 cout << obj2.sum << endl;//全局对象,未初始化的变量都是默认值
214 */
215
216
217
218 /*这段代码,我只是想演示 vector的长度是正常的计数,不是-1
219 vector<int> a;
220 a.push_back(1);
221 a.push_back(2);
222 int nSize = a.size();
223 cout << nSize << endl;
224 */
225
226
227
228 /*
229 vector<int> vec1;
230 vec1.clear();
231 vec1.push_back(10);
232 vec1.push_back(20);
233 vec1.push_back(30);
234 vec1.push_back(40);
235 vec1.push_back(50);
236 //vec1数据
237 for (size_t i = 0; i < vec1.size();i++)
238 {
239 cout << vec1[i] << endl;
240 }
241
242 cout << "------------------" << endl;
243 //vec2数据
244 vector<int> vec2(vec1);//用vec1初始化vec2
245 for (size_t i = 0; i < vec2.size(); i++)
246 {
247 cout << vec2[i] << endl;
248 }
249
250 cout << "--------------------------" << endl;
251 vector<int> vec3(20,5);//20个数据,每个元素的值都是5
252 for (size_t i = 0; i < vec3.size(); i++)
253 {
254 cout << vec3[i] << endl;
255 }
256
257
258 //vector<Foo> a;
259 //vector<Foo> b(10, 1);//10表示vector数量,1表示Foo构造函数的参数
260
261
262 vector<int>::iterator first = vec1.begin();
263 vector<int>::iterator last = vec1.end();
264 if (first != last)
265 {
266 int number = *first + *(first + 1);
267 cout << number << endl;
268
269 first++;
270 }
271
272 */
273
274
275 /*
276 vector<int> vec1;
277 vec1.push_back(10);
278 vec1.push_back(20);
279 vec1.push_back(30);
280 vec1.push_back(40);
281 vec1.push_back(50);
282
283 const vector<int> vec2(vec1);
284
285 //常迭代器
286 vector<int>::iterator Iter = vec2.begin();
287
288 while (Iter != vec2.end())
289 {
290 //修改元素值
291 //*Iter = *Iter + 10000;
292
293 cout << *Iter << endl;
294
295 Iter++;
296 }
297
298 */
299
300 /*
301 vector<string> list1;
302 list1.push_back("Beijing");
303 list1.push_back("shanghai");
304 list1.push_back("nnajing");
305 list1.push_back("yancheng");
306 list1.push_back("xiangshui");
307
308
309 list1.resize(3);
310 for (vector<string>::iterator Iter = list1.begin(); Iter != list1.end();Iter++)
311 {
312 cout << *Iter << endl;
313 }
314
315 //vector<string>::iterator Iter = list1.begin();
316 //while (Iter != list1.end())
317 //{
318 // cout << *Iter << endl;
319 // Iter++;
320 //}
321
322
323
324 //vector<int>::size_type count = list1.size();
325 //vector<int>::size_type maxCount = list1.max_size();
326
327 //cout << count << " " << maxCount << endl;
328
329 //if (list1.empty())
330 //{
331 // cout << "容器是空的" << endl;
332 //}
333 //else
334 //{
335 // cout << "容器不是空的" << endl;
336 //}
337 //cout << list1.capacity() << endl;
338 //cout << list1.size() << endl;
339
340 //cout << list1.size() << endl;
341 //cout << list1.capacity() << endl;
342
343 //list1.resize(0);
344 //if (list1.empty())
345 //{
346 // cout << "empty()" << endl;
347 //}
348 */
349
350
351 /*
352 vector<int> list1;
353
354 list1.push_back(11);
355 list1.push_back(22);
356 list1.push_back(33);
357 list1.push_back(44);
358
359 int a = list1.at(3);
360 cout << a << endl;
361 */
362
363
364 /*
365 list<string> ilist;
366 ilist.push_back("apple");
367 ilist.push_back("bill");
368 ilist.push_back("cat");
369 ilist.push_back("dog");
370 ilist.push_back("egg");
371 ilist.push_back("fish");
372 ilist.push_back("girl");
373
374
375 //ilist.pop_front();
376 //ilist.pop_back();
377
378
379 //string sValue("bill");
380 //string svalue2 = "girl";
381 //list<string>::iterator Iter1 = find(ilist.begin(), ilist.end(), sValue);
382 //list<string>::iterator Iter2 = find(ilist.begin(), ilist.end(), svalue2);
383
384 //if (Iter1 != ilist.end() && Iter2 != ilist.end())
385 //{
386 // cout << "找到了 " << sValue << endl;
387 // ilist.erase(Iter1, Iter2);
388 //}
389 //else
390 //{
391 // cout << "没找到 " << sValue << endl;
392 //}
393
394 ilist.erase(ilist.begin(), ilist.end());
395 if (ilist.empty())
396 {
397 cout << "全部删除了,之所以能删除是因为 ilist.end()表示最后1个后1个, 所以前面是全部删除了" << endl;
398 }
399 else
400 {
401 cout << "no" << endl;
402 }
403
404 for (list<string>::iterator Iter = ilist.begin(); Iter != ilist.end();Iter++)
405 {
406 cout << *Iter << endl;
407 }
408
409
410 */
411
412
413
414
415 /*
416 vector<int> a;
417 vector<int> b;
418 vector<int> c;
419
420 a.push_back(1000);
421 a.push_back(2000);
422 a.push_back(3000);
423 a.push_back(4000);
424
425 b.push_back(11);
426 b.push_back(22);
427 b.push_back(33);
428
429 c.push_back(66);
430 c.push_back(77);
431 c.push_back(88);
432
433 cout << "a---------" << endl;
434 for (vector<int>::iterator Itera = a.begin(); Itera != a.end();Itera++)
435 {
436 cout << *Itera << endl;
437 }
438
439 cout << "b----" << endl;
440 for (vector<int>::iterator Iterb = b.begin(); Iterb != b.end();Iterb++)
441 {
442 cout << *Iterb << endl;
443 }
444
445
446 cout << "------------------------------------------------开始交换" << endl;
447
448 //a.swap(b);
449 b.swap(a);
450
451 cout << "a---------" << endl;
452 for (vector<int>::iterator Itera2 = a.begin(); Itera2 != a.end(); Itera2++)
453 {
454 cout << *Itera2 << endl;
455 }
456
457 cout << "b----" << endl;
458 for (vector<int>::iterator Iterb2 = b.begin(); Iterb2 != b.end(); Iterb2++)
459 {
460 cout << *Iterb2 << endl;
461 }
462
463 cout << "赋值 -------------------------------------------------------------" << endl;
464
465 a = b;
466
467 for (vector<int>::iterator Itera2 = a.begin(); Itera2 != a.end(); Itera2++)
468 {
469 cout << *Itera2 << endl;
470 }
471
472 cout << "b----" << endl;
473 for (vector<int>::iterator Iterb2 = b.begin(); Iterb2 != b.end(); Iterb2++)
474 {
475 cout << *Iterb2 << endl;
476 }
477
478 cout << "赋值 -------------------------------------------------------------" << endl;
479
480 a.assign(c.begin(), c.end());
481 for (vector<int>::iterator Itera2 = a.begin(); Itera2 != a.end(); Itera2++)
482 {
483 cout << *Itera2 << endl;
484 }
485
486 cout << "赋值 -------------------------------------------------------------" << endl;
487
488
489 a.assign(5, 8888);
490 for (vector<int>::iterator Itera2 = a.begin(); Itera2 != a.end(); Itera2++)
491 {
492 cout << *Itera2 << endl;
493 }
494
495
496 cout << "----------------------------------------------容量 增长" << endl;
497 a.reserve(5);
498 cout << a.size() << " " << a.capacity() << endl;
499 */
500
501
502
503 /*
504 cout <<"----------------------------------------------------------------deque类"<<endl;
505
506
507 deque<int> a;
508 a.push_back(3);
509 a.push_back(4);
510
511 a.push_front(2);
512 a.push_front(1);
513
514 for (deque<int>::iterator Iter = a.begin(); Iter != a.end();Iter++)
515 {
516 cout << *Iter << endl;
517 }
518
519
520 cout << "删除" << endl;
521
522 a.pop_back();
523 for (size_t nCount = 0; nCount < a.size();nCount++)
524 {
525 cout << a[nCount] << endl;
526 }
527
528 */
529
530
531 /*
532
533 list<int> a;
534 a.push_front(3);
535 a.push_front(2);
536 a.push_back(4);
537 a.push_front(1);
538 a.push_front(0);
539
540 for (list<int>::iterator Iter = a.begin(); Iter != a.end();Iter++)
541 {
542 cout << *Iter << " ";
543 }
544
545 cout << endl;
546 a.reverse();
547 for (list<int>::iterator Iter = a.begin(); Iter != a.end(); Iter++)
548 {
549 cout << *Iter << " " ;
550 }
551
552 */
553
554
555
556
557 //算法
558 /*
559 //自动排序的红黑树
560 //set<int> a; //less<int>是默认的函数对象
561 set<int, less<int>> a; //less<int>是默认的函数对象
562 //set<int, greater<int>> a;
563
564 a.insert(9);
565 a.insert(3);
566 a.insert(8);
567 a.insert(1);
568 a.insert(5);
569 a.insert(11);
570
571 set<int,less<int>>::iterator Iter = a.begin();
572
573
574
575 while (Iter != a.end())
576 {
577 cout << *Iter << endl;
578 Iter++;
579 }
580
581 //for_each(a.begin(), a.end(), 函数对象);
582 cout << "-------------------" << endl;
583 for_each(a.begin(), a.end(), printt);*/
584
585
586
587 // vector<int> ivec;
588 // for (int i = 1; i <= 9;i++)
589 // {
590 // ivec.push_back(i);
591 // }
592 //
593 // ivec.push_back(4);
594 // ivec.push_back(4);
595 // ivec.push_back(4);
596 // ivec.push_back(4);
597 //
598 //
599 //
600 // int num = count(ivec.begin(), ivec.end(), 4);
601 // cout << num << "个4" << endl;
602 // cout << "-----------" << endl;
603 //
604 // vector<string> temp;
605 // temp.push_back("aaaaa");
606 // temp.push_back("aaaaa");
607 // temp.push_back("bbbbb");
608 // temp.push_back("ccccc");
609 //
610 // num = count(temp.begin(), temp.end(), "aaaaa");
611 // cout << num << "个 aaaaa" << endl;
612
613
614
615 //min or max
616 // vector<int> temp;
617 // temp.clear();
618 // for (int i = -10; i <= 10; i++)
619 // temp.push_back(i);
620 //
621 //
622 // vector<int>::iterator Iter = temp.begin();
623 // //while (Iter != temp.end() )
624 // //{
625 // // cout << *Iter << endl;
626 // // Iter++;
627 // //}
628 //
629 // cout << *max_element(temp.begin(), temp.end()) << endl;
630
631
632
633 /*
634 list<int> ilist;
635 for (int i = 0; i < 10;i++)
636 {
637 ilist.insert(ilist.end(), i);
638 }
639 for (int i = 0; i < 10; i++)
640 {
641 ilist.insert(ilist.end(), i);
642 }
643
644 list<int>::iterator Iter = ilist.begin();
645
646 list<int>::iterator IterPos;
647 IterPos = find(ilist.begin(), ilist.end(), 4);
648 */
649
650
651 /*
652 string s("asdfaslasdfkljhlkj");
653 string::size_type pos = s.find("asd");
654 if (pos != string::npos)
655 {
656 cout << "找到了" << endl;
657 cout << pos << endl;
658 }
659 else
660 {
661 cout << "没找到" << endl;
662 }
663 */
664
665
666
667
668
669
670
671
672
673
674 /*
675 deque<int> idep;
676 for (int i = 1; i < 10;i++)
677 {
678 idep.push_back(i);
679 }
680
681
682 deque<int>::iterator Iter = idep.begin();
683
684 search()*/
685
686
687
688
689
690 //交换算法
691
692 /*
693 vector<int> ivec;
694 deque<int> ideq;
695 ivec.clear();
696 ideq.clear();
697 for (int i = 0; i <= 9;i++)
698 {
699 ivec.push_back(i);
700 }
701 for (int i = 11; i <= 15; i++)
702 {
703 ideq.push_back(i);
704 }
705
706
707
708
709 swap_ranges(ivec.begin(), ivec.end(), ideq.begin());
710
711
712
713 for (vector<int>::iterator Iter = ivec.begin(); Iter != ivec.end(); Iter++)
714 {
715 cout << *Iter << endl;
716 }
717 cout << "-------------------------" << endl;
718 for (deque<int>::iterator Iter = ideq.begin(); Iter != ideq.end(); Iter++)
719 {
720 cout << *Iter << endl;
721 }*/
722
723
724
725 /*
726 vector<int> ivec1;
727 vector<int> ivec2;
728
729 for (int i = 0; i <= 9; i++)
730 {
731 ivec1.push_back(i);
732 }
733 for (int i = 11; i <= 30; i++)
734 {
735 ivec2.push_back(i);
736 }
737
738
739 ivec1.swap(ivec2);
740
741
742 for (vector<int>::iterator Iter = ivec1.begin(); Iter != ivec1.end(); Iter++)
743 {
744 cout << *Iter << endl;
745 }
746 cout << "-------------------------" << endl;
747 for (vector<int>::iterator Iter = ivec2.begin(); Iter != ivec2.end(); Iter++)
748 {
749 cout << *Iter << endl;
750 }*/
751
752
753 /*
754 list<string> slist;
755 slist.push_back("hello");
756 slist.push_back("hi");
757 slist.push_back("good morning");
758
759
760 replace(slist.begin(), slist.end(), "hello", "Doris");
761 for (list<string>::iterator Iter = slist.begin(); Iter != slist.end();Iter++)
762 {
763 cout << *Iter << endl;
764 }
765 */
766
767
768
769 /*
770 int source[] = { 1, 2, 2, 3, 12, 3, 1343665, 78, 875, 4, 5, 34, 5, 87, 4, 67341 };
771 int Num = sizeof(source) / sizeof(source[0]);
772 cout << Num << endl;
773
774
775 list<int> ilist;
776 copy(source, source + Num, back_inserter(ilist));
777
778 list<int>::iterator Iter = ilist.begin();
779 while (Iter != ilist.end())
780 {
781 cout << *Iter << " ";
782 Iter++;
783 }
784 cout << endl;
785 unique(ilist.begin(), ilist.end());
786 for (list<int>::iterator Iter = ilist.begin(); Iter != ilist.end();Iter++)
787 {
788 cout << *Iter << " ";
789 }
790 */
791
792
793
794
795 /*
796 string name("AnnaBella");
797 string::size_type pos1 = name.find("nn");
798
799 if (string::npos == pos1)
800 cout << "没找到,返回特定的code, string::npos" << endl;
801 else
802 cout << "找到了,下标是" << pos1 << endl;*/
803
804
805 /*
806
807 string name = "r2d3";
808 string numerics("tew9993");
809 string::size_type pos = name.find_first_of(numerics);
810 if (string::npos == pos)
811 {
812 cout << "not find" << endl;
813 }
814 else
815 {
816 cout << "find " << endl;
817 }*/
818
819
820 /*
821 string str = "C++ Primer 3rd ed";
822 str.replace(11, 3, "4Fourth");
823 cout << str << endl;*/
824
825
826
827
828
829 /*
830 int arr[] = { 9, 1, 23, 4 ,8};
831 int *p = arr;
832
833 cout << *arr << endl; //数组名就是指针
834 cout << *p << endl;
835
836 p = arr;
837 cout << *p << endl;
838 p = arr + 4; //指针or数组名 移动
839 cout << *p << endl;
840
841 p = p + 11; //越界
842 cout << *p << endl;
843
844
845 int *p1 = arr;
846 int *p2 = arr + 4;
847 ptrdiff_t n = p1 - p2; //ptrdiff_t 类型专门用于计算 2个指针之间的距离...只对指针有效,对数组名无效
848 cout << n << endl;
849
850
851
852 cout << "开始循环:" << endl;
853 const size_t arr_sz = 5;
854 int int_arr[arr_sz] = { 0, 1, 2, 3, 4 }; //长度是常量,所有会定义const arr_sz
855
856 //逗号表达式,最后1个值是固定的,类似迭代器的写法了,这里的pend相当于是数组的尾后地址..C++允许的...需要好好理解会
857 for (int *pBegin = int_arr, *pend = int_arr + arr_sz; pBegin != pend;++pBegin)
858 {
859 cout << *pBegin << endl;
860 }*/
861
862
863
864
865
866 /*
867 int arr[] = { 9, 1, 23, 4, 8 };
868 int *p = arr;
869
870
871 cout << arr << endl;
872 cout << p << endl;
873
874 p = arr + 3;
875 cout << p << " " << *p << " " << &(arr[3]) << endl; //的确是的:指针移动了,P就指向了新的地址*/
876
877
878
879 /*
880 double temp = 1.2;
881 double *p = &temp;
882
883
884 const double temp2 = 2.3;
885 //p = &temp2; //普通指针不能指向常量指针
886 const double *p2;
887 p2 = &temp2; //常指针指向常对象
888
889 p2 = &temp; //常对象可以指向普通对象*/
890
891
892
893 /*
894 string s("hello"); //可以修改,C++风格字符串 没有\0
895
896 char ca3[] = "hello"; //可以修改,C风格字符串 有隐含的\0
897 char ca2[] = { 'C', '+', '+', NULL }; //这也是C风格字符串 \0 = NULL 2者等价
898
899 char ca1[] = { 'C', '+', '+' }; //这是字符数组,不是字符串,因为没有\0
900
901
902 char *cp2 = "panzhengming"; //指向字符串的指针
903
904 int n = 0;
905 while (*cp2)
906 {
907 n++;
908 cp2++;
909
910 if (n == 3)
911 {
912 cout << *cp2 << " ";
913 break;
914 }
915
916
917 }
918
919 false;
920
921 cout << strlen(cp2) << endl;*/
922
923
924
925
926
927 /*
928 vector<vector<int>> temp;
929 temp.clear();
930
931 vector<int> a;
932 a.clear();
933 for (int i = 0; i < 10;i++)
934 {
935 a.push_back(i);
936 }
937 temp.push_back(a);
938
939
940 vector<vector<int>>::iterator Iter = temp.begin();
941 while (Iter != temp.end())
942 {
943 cout << *Iter << endl;
944 }*/
945
946
947
948
949
950 /*
951 //命令行参数
952 cout << "一共" << argc << "个参数" << endl;
953
954 cout << argv[0] << endl;
955 cout << argv[1] << endl;
956 cout << argv[2] << endl;
957 cout << argv[3] << endl;
958
959 //但是一定要注意 argv的越界,空字符串的 特殊情况
960 */
961
962
963
964
965
966 /*
967 这个列子很有意思,2次引用
968 int a = 1;
969 int &b = add_one(a);
970 b++;
971 cout << a << " " << b << endl;*/
972
973
974
975
976 //hash_map
977
978
979 /*
980 注意这样取值是容易错误的
981
982
983 map<int, int> temp;
984 temp.clear();
985 int str = temp[2];
986 cout << str << endl;
987 */
988
989
990
991
992 /*这个有点吊了,新标准的C++支持unicode和编译器设置 就可以使用 中文变量了
993
994 unsigned char 潘正明;
995 潘正明 = 123;
996 cout << int(潘正明) << endl;
997
998 */
999
1000
1001
1002 /*
1003 位元算
1004 unsigned int bits = 02;
1005 cout << bits << endl;
1006
1007 bits = ~bits;
1008 cout << bits << endl;
1009 */
1010
1011
1012 /*
1013 unsigned char b1 = 0145;
1014 unsigned char b2 = 0257;
1015 unsigned char result = b1 | b2;
1016 cout << (int)result << endl;*/
1017
1018
1019 /*bitset<32> temp;
1020 int nSize = temp.size();
1021 for (int i = 0; i < nSize;i = i + 2)
1022 {
1023 temp.set(i);
1024 }
1025 */
1026
1027
1028 /*
1029 bitset<3> bs(7);//用 7的二进制填充bs对象
1030 cout << bs[0] << " " << bs[1] << " " << bs[2] << endl;
1031 //cout << bs[3] << endl;//运行时异常
1032
1033
1034 string strVal = "011";
1035 bitset<3> bs1(strVal);//记住 string是反向填充 bitset对象
1036 cout << bs1[0] << " " << bs1[1] << " " << bs1[2] << endl;
1037 cout << bs1 << endl;//也可以直接输出bitset对象*/
1038
1039
1040 /*
1041 二进制
1042
1043 cout << "-------------------------------------------->开始执行程序啦" << endl;
1044 int *p = new int(111);
1045 delete p;
1046 p = 0;
1047 cout << p << endl;
1048 */
1049
1050 /*
1051 sizeof操作
1052
1053 int nLen = 11;
1054 cout << sizeof(nLen) << endl;
1055 cout << sizeof(int) << endl;
1056
1057 int x[] = { 2, 4, 6, 8, 10, 1, 3, 5, 7, 9 };
1058
1059 for (int i = 0;i<sizeof(x)/sizeof(int);i++)
1060 {
1061 cout << x[i] << " ";
1062 }
1063
1064 cout <<endl << "自定义数据类型Student的存储结构大小: " << sizeof(Student) << endl;*/
1065
1066
1067 /*逗号表达式
1068 int x[] = { 2, 4, 6, 8, 10, 1, 3, 5, 7, 9 };
1069 for (int k = 0, cnt = 10; k < 10;++k,--cnt)
1070 {
1071 x[k] = cnt;
1072 }
1073
1074 //类似
1075 int cnt = 10;
1076 for (int k = 0; k < 10;++k)
1077 {
1078 x[k] = cnt;
1079 cnt--;
1080 }*/
1081
1082 /*
1083
1084 //枚举可以直接打印
1085 cout << nAppend << endl;
1086 cout << nY << endl;
1087 cout << nZ << endl;
1088 */
1089
1090 /*
1091 指针属于非引用参数
1092 int a = 10;
1093 AddThree(&a);
1094 */
1095
1096
1097 /*
1098 二维数组
1099 int m[][10] =
1100 {
1101 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
1102 { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
1103 { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }
1104 };
1105
1106 printValue_5(m, 3);
1107 */
1108
1109
1110 /*递归 ,普通的循环就是迭代,遍历的意思
1111 //DoA();
1112 int nRet = Factorial(5);
1113 cout << nRet << endl;
1114 for (int i = 0; i <= 10;i++)
1115 {
1116 cout << i<<"! = "<<Factorial(i) << endl;
1117 }
1118 */
1119
1120
1121
1122 /*
1123 cout << "****************" << endl;
1124 cout << ::atoi("") << endl;//给""字符串,那么返回的是0
1125 */
1126
1127
1128
1129
1130 /*STL与指针
1131 vector<string*> spvec;
1132 string str;
1133 cout << "Enter some strings (Ctrl+Z to end)" << endl;
1134 while (cin >> str)
1135 {
1136 string *pstr = new string;
1137 *pstr = str;
1138 spvec.push_back(pstr);
1139 }
1140
1141 cout << "现在开始输出:" << endl;
1142 vector<string*>::iterator Iter = spvec.begin();
1143 while (Iter != spvec.end())
1144 {
1145 cout << *Iter << " " << **Iter << endl;
1146
1147 ++Iter;
1148 }
1149
1150
1151 //内存管理,释放内存
1152 Iter = spvec.begin();//当前的Iter不是第一次声明的那个Iter .移动过了,所以要重新获取
1153 while (Iter != spvec.end())
1154 {
1155 delete *Iter;
1156 Iter++;
1157 }
1158
1159 */
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171 //以下是WindowsAPI编程
1172
1173
1174 //这个很有趣,哈哈哈
1175 //MessageBox(NULL, TEXT("panzhengming"), TEXT("命令行直接调用WindowsAPI"), MB_OK);
1176 /*
1177 LPSTR szString = "windows data type ,string";
1178 CHAR lpString[120];
1179 CopyMemory(lpString, szString, lstrlen(szString) + 1);
1180 MessageBox(NULL, lpString, "aaa", MB_OK);
1181 */
1182
1183 /*读取文件
1184 HANDLE hFileRead;
1185 hFileRead = CreateFile(L"1.cpp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
1186 if (hFileRead == INVALID_HANDLE_VALUE)
1187 {
1188 printf("Can not open file ..error: %x\n",GetLastError());
1189 system("pause");
1190 return -1;
1191 }
1192
1193 const int buf_size = 256;
1194 CHAR buffer[buf_size];
1195 DWORD nIn;
1196 while (ReadFile(hFileRead, buffer, buf_size, &nIn, NULL) && nIn > 0)
1197 {
1198 printf("%s\n", buffer);
1199 }
1200
1201 */
1202
1203
1204
1205 /*
1206 //读取文件属性
1207 WIN32_FILE_ATTRIBUTE_DATA wData;
1208 if (!GetFileAttributesEx(L"1.cpp", GetFileExInfoStandard, &wData))
1209 {
1210 system("pause");
1211 return -1;
1212 }
1213
1214 PFILETIME lptime = &wData.ftCreationTime;
1215 FILETIME ftLocal;
1216 SYSTEMTIME st;
1217 FileTimeToLocalFileTime(lptime, &ftLocal);
1218 FileTimeToSystemTime(&ftLocal, &st);
1219 printf("%d年%d月%d日, %d时%d分%d秒", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
1220 //cout << wData.ftCreationTime << " " << wData.ftLastAccessTime << " " << wData.ftLastWriteTime << endl;
1221 printf("\n%d",wData.ftCreationTime);
1222 */
1223
1224
1225 /*
1226 //获取文件目录
1227 TCHAR szSystemDir[MAX_PATH]; //MAX_PATH windows定义目录长度最多260
1228 GetSystemDirectory(szSystemDir, MAX_PATH);
1229 printf("%s", szSystemDir);//--获取windows的系统安装目录,因为有人可能装在别的盘符里
1230 */
1231
1232
1233 /*
1234 //宽字节
1235 char只能存储 ASIC英文字符,不能保存中文字符,也就可以保存其他国家的字符
1236 使用printf()输出
1237 wchar_t c2 = L'中'; L不能省略,表示宽字符,新编的C语言有wchar_t类型
1238 使用wprintf(L"%c",c2)输出
1239 ---------------------------------------
1240
1241
1242
1243 setlocale(LC_ALL, "");//使用宽字符输出的时候,要设置本地化设置,头文件是 #include <locale.h>
1244 wchar_t c2 = L'中';
1245 wprintf(L"%c", c2);//好像是2个字符算1个
1246
1247 */
1248
1249
1250
1251 /*
1252 ansi 和 unicode 相互转化
1253
1254 setlocale(LC_ALL, "");//本地区域,这样就可以使用 unicode
1255 DWORD dwNum;
1256 char sText[] = "ANSI多字节字符串 转 宽字符串";
1257 dwNum = MultiByteToWideChar(CP_ACP, 0, sText, -1, NULL, 0);//先计算需要多大的存储空间
1258 wchar_t *pwText;
1259 pwText = new wchar_t[dwNum];
1260 if (!pwText)
1261 {
1262 delete[] pwText;
1263 return 1;
1264 }
1265 MultiByteToWideChar(CP_ACP, 0, sText, -1, NULL, dwNum);
1266 wprintf(L"m->w:%s", pwText);
1267 MessageBoxW(NULL, pwText, L"Text", MB_OK);
1268 delete[] pwText;
1269
1270
1271 wchar_t wText[] = L"宽字符串 转 多字节字符串";
1272 dwNum = WideCharToMultiByte(CP_OEMCP, 0, wText, -1, NULL, 0, NULL, NULL);
1273 char *psText;
1274 psText = new char[dwNum];
1275 if (!psText)
1276 {
1277 delete[] psText;
1278 return 2;
1279 }
1280 WideCharToMultiByte(CP_OEMCP, 0, wText, -1, psText, dwNum, NULL, NULL);
1281 printf("\nw->m %s", psText);
1282 MessageBoxA(NULL, psText, "Text", MB_OK);
1283 */
1284
1285
1286
1287 /*
1288
1289 遍历逻辑卷,方法1 逻辑卷名
1290
1291 const int bufsize = 1024;
1292 wchar_t szLogicalDriverStrings[bufsize];
1293 ZeroMemory(szLogicalDriverStrings, bufsize);
1294
1295 GetLogicalDriveStrings(bufsize - 1, szLogicalDriverStrings);
1296 //printf("%s \n", szLogicalDriverStrings);//这个是不能正常打印szLogicalDriverStrings ,因为szLogicalDriverStrings的字符格式里面包含 \0,所以printf()只能显示第一个盘符
1297 PCHAR szDrive;
1298 szDrive = (PCHAR)szLogicalDriverStrings;
1299 do
1300 {
1301 printf("%s\n", szDrive);
1302 szDrive = szDrive + 4; //这个地方是我手动写的,我转化不了下面的字符类型
1303 //szDrive = szDrive + (lstrlen(szDrive) + 1);
1304 } while (*szDrive != '\0');
1305 */
1306
1307
1308 /*
1309
1310 遍历逻辑卷,方法2 设备名
1311
1312
1313 const int buf_size = 1024;
1314 TCHAR buf[buf_size];
1315 HANDLE hVol;
1316 bool bFlag;
1317
1318 hVol = FindFirstVolume(buf, buf_size);
1319 if (hVol == INVALID_HANDLE_VALUE)
1320 {
1321 printf("no found volumes !\n");
1322 return 1;
1323 }
1324
1325 printf("%s \n",buf);
1326
1327 */
1328
1329
1330 /*
1331 驱动器属性
1332 GetDriveType();
1333 GetVolumeInformation();
1334
1335 这2个API没写代码,很简单,不会就百度下.感觉很好理解这个
1336 */
1337
1338 /*
1339 磁盘容量
1340 磁盘->簇->扇区->字节
1341
1342
1343
1344 DWORD dwTotalClusters;
1345 DWORD dwFreeClusters;
1346
1347 DWORD dwSectPerCulust;
1348 DWORD dwBytesPerSect;
1349
1350 //需要传入盘符号
1351 BOOL ret = GetDiskFreeSpace(TEXT("c:"), &dwSectPerCulust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters);
1352 if (!ret)
1353 {
1354 printf("11111111");
1355 }
1356 printf(" 使用GetDiskFreeSpace()uhoqu磁盘空间信息:\n");
1357 printf("总的簇数量:\t\t\t\t\t\t%d\n", dwTotalClusters);
1358 printf("空闲的簇数量:\t\t\t\t\t\t%d\n", dwFreeClusters);
1359 printf("每个簇的扇区数量是:\t\t\t\t\t%d\n", dwSectPerCulust);
1360 printf("每个扇区字节数是:\t\t\t\t\t%d\n", dwBytesPerSect);
1361
1362 //GetDiskFreeSpaceEx(); ke
1363 */
1364
1365
1366
1367 /*
1368 文件操作的4种方式
1369 1.C
1370 2.C++
1371 3.API
1372 4.MFC
1373 */
1374
1375
1376 /*
1377
1378 文件的 删除,移动/重命名,拷贝
1379
1380
1381 DeleteFile();
1382 MoveFile();
1383 CopyFile()
1384 */
1385
1386
1387 /*
1388
1389 文件内容拷贝
1390 //c
1391 fopen()
1392 fread()
1393 fwrite()
1394 fclose()
1395
1396
1397 //windows
1398 CreateFile()
1399 ReadFile()
1400 WriteFile()
1401 CopyFile()
1402
1403 */
1404
1405
1406
1407 /*
1408 目录与模块
1409
1410
1411
1412 CreateDirectory()
1413 GetCurrentDirectory()
1414 SetCurrentDirectory()
1415 GetModuleFileName()
1416
1417
1418 LoadLibrary()
1419 */
1420
1421
1422
1423 /*
1424 遍历目录
1425 FindFirstFile()
1426 FindNextFile()
1427 WIN32_FIND_DATA
1428
1429 HANDLE
1430 */
1431
1432
1433 /*
1434 文件属性和时间
1435 FileTimeToLocalFileTime()//文件时间转化成本地时间
1436 FileTimeToSystemTime()//本地时间转化成系统时间
1437 GetFileAttributesEx()
1438 //低位,高位,位元算
1439
1440
1441 GetFileAttributes()
1442 SetFileAttributes()
1443
1444 */
1445
1446
1447
1448 /*
1449
1450 内存映射文件
1451
1452 HANDEL hFile
1453 CreateFile()
1454 CreateFileMapping()
1455 MapViewOfFile()
1456
1457
1458 */
1459
1460
1461
1462
1463
1464 /*
1465
1466 系统信息1
1467
1468 OSVERSIONINFO ovex;
1469 TCHAR szVersionInfo[1024];
1470 *szVersionInfo = NULL;
1471 ovex.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
1472 if (!GetVersionEx(&ovex)) //为啥这个函数编译不过去
1473 {
1474 printf("error ");
1475 return 1;
1476 }
1477
1478
1479 */
1480
1481
1482 /*
1483 系统信息2
1484 吗的,显示的不完全呀
1485
1486
1487
1488
1489 TCHAR szDirName[MAX_PATH];
1490 GetSystemDirectory(szDirName,MAX_PATH);
1491 printf("系统目录:\t %s\n", szDirName); //好像不同的版本,目录路径 不一样
1492
1493 GetWindowsDirectory(szDirName, MAX_PATH);
1494 printf("windows目录:\t %s\n", szDirName); //window目录
1495
1496 DWORD dwComputerNameLen = MAX_COMPUTERNAME_LENGTH + 1;
1497 GetComputerName(szDirName, &dwComputerNameLen); //计算机名
1498 printf("计算机名:\t %s\n", szDirName);
1499
1500 GetUserName(szDirName, &dwComputerNameLen); //用户名
1501 printf("用户名:\t %s\n", szDirName);
1502
1503
1504 BOOL fret;
1505 int aMouseInfo[3];
1506 fret = SystemParametersInfo(SPI_GETMOUSE, 0, &aMouseInfo, 0);// spi是外设的意思
1507 if (fret)
1508 {
1509 aMouseInfo[2] = 4 * aMouseInfo[2];//设置鼠标移动速度
1510 SystemParametersInfo(SPI_GETMOUSE, 0, aMouseInfo, SPIF_SENDCHANGE);
1511 }
1512
1513 printf("ok\n");
1514
1515 */
1516
1517
1518
1519
1520
1521 /*
1522 时间
1523
1524
1525 //获取时间
1526 SYSTEMTIME st;
1527 GetLocalTime(&st);//本地时间
1528 printf("Now:%d-%d-%d, %d:%d:%d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
1529
1530
1531 //修改时间,通过结构体字段来实现
1532 st.wHour = 11;
1533 SetLocalTime(&st);
1534 printf("Now:%d-%d-%d, %d:%d:%d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
1535
1536
1537 //开机到现在的持续时间 单位是毫秒
1538 DWORD c1 = GetTickCount(); //这个保存的时间太短,类型决定的
1539 ULONGLONG c2 = GetTickCount64(); //常用的是这个, 高版本的windows会有这个函数
1540 printf("%d %d", c1, c2);
1541
1542
1543 //随机数
1544 const int total = 10000;
1545 int nums[total];
1546 srand(GetTickCount64()); //设置随机种子..还是不太了解
1547
1548 for (int i = 0; i < total;i++)
1549 {
1550 nums[i] = rand() % 1000;
1551 printf("%d\n", nums[i]);
1552 }
1553
1554
1555 //快速排序
1556 //qsort(nums, total, sizeof(nums[0]), func_cmp); 这个没写,暂时不想写
1557 int nStartTime = GetTickCount();
1558 int nEndTime = GetTickCount();
1559
1560 */
1561
1562
1563 /*
1564 注册表 读写
1565
1566 //读
1567 HKEY hKey;
1568 TCHAR tchData[64];
1569 long lRet = RegOpenKey(HKEY_LOCAL_MACHINE, _T("hardware\\description\\system\\centralprocessor\\0"), &hKey);
1570 if (ERROR_SEVERITY_SUCCESS == lRet)//成功
1571 {
1572 DWORD dwSize = sizeof(tchData);
1573 lRet = RegQueryValueEx(hKey, _T("ProcessorNameString"), NULL, NULL, (LPBYTE)tchData, &dwSize);
1574
1575 if (ERROR_SEVERITY_SUCCESS == lRet)
1576 {
1577 printf("%s\n", tchData);
1578 }
1579 }
1580
1581 RegCloseKey(hKey); //代码是这样的,但是编译不通过
1582
1583
1584 //写
1585
1586 HKEY hKey;
1587 RegCreateKey(HKEY_LOCAL_MACHINE,_T("xxxx\\xxx\\xxx"),&hKey);
1588 RegSetValue(hKey, NULL, REG_SZ, _T("Liebao"), 6); //这个API只能添加默认的
1589 DWORD dwAge = 30;
1590 RegSetValueEx(hKey, _T("新增的用RegSetValueEx()"), 0, REG_DWORD, (CONST BYTE*)&dwAge, 4); //这个可以新增新的key
1591 RegCloseKey(hKey);
1592
1593 */
1594
1595
1596
1597
1598 /*
1599 内存信息
1600
1601
1602 MEMORYSTATUSEX memstatsex;
1603 memstatsex.dwLength = sizeof(memstatsex);
1604
1605 GlobalMemoryStatusEx(&memstatsex);
1606 printf("全部物理内存: %I64u 字节\n", memstatsex.ullTotalPhys);
1607 printf("可用物理内存: %I64u 字节\n", memstatsex.ullAvailPhys);
1608 printf("全部虚拟内存: %I64u 字节\n", memstatsex.ullTotalVirtual);
1609 printf("可用虚拟内存: %I64u 字节\n", memstatsex.ullAvailVirtual);
1610 printf("全部页面文件: %I64u 字节\n", memstatsex.ullTotalPageFile);
1611 printf("可用页面文件: %I64u 字节\n", memstatsex.ullAvailPageFile);
1612
1613
1614 */
1615
1616 /*
1617 系统信息
1618 SYSTEM_INFO sinf;
1619 GetSystemInfo(&sinf);
1620 */
1621
1622
1623
1624
1625
1626 /*
1627
1628 堆内存
1629
1630
1631 SYSTEM_INFO si;
1632 HANDLE hHeap1, hHeap2;
1633 DWORD dwHeapNum;
1634
1635 GetSystemInfo(&si);
1636 hHeap1 = HeapCreate(HEAP_NO_SERIALIZE, si.dwPageSize * 2, si.dwPageSize * 10);//堆的页面最小,最大设置
1637 if (hHeap1 == NULL)
1638 {
1639 printf("创建堆失败\n");
1640 return 1;
1641 }
1642 printf("创建堆成功,初识页面2页,最大是10页\n");
1643
1644
1645 hHeap2 = HeapCreate(HEAP_NO_SERIALIZE, 0, 0);//如果不写明的,初始的大小向上取值,最大不限制
1646 printf("创建堆成功,初识页面1页,最大不限制\n");
1647
1648 dwHeapNum = GetProcessHeaps(0, NULL);
1649 if (0 == dwHeapNum)
1650 {
1651 printf("进程至少有个默认堆");
1652 return 1;
1653 }
1654 cout << dwHeapNum << endl;
1655
1656
1657
1658 PVOID lpMem1, lpMem2;
1659 lpMem1 = HeapAlloc(hHeap1, HEAP_ZERO_MEMORY, si.dwPageSize * 3);
1660 if (lpMem1 == NULL)
1661 {
1662 printf("error");
1663 return 1;
1664 }
1665
1666 printf("在堆上分配内存成功,起始地址: 0x%x\n", lpMem1);
1667
1668
1669 */
1670
1671
1672
1673
1674 /*
1675 内存的常用操作
1676 */
1677
1678
1679
1680
1681
1682
1683
1684 //算法
1685 /*
1686
1687 冒泡
1688
1689
1690 {
1691
1692 const int nSize = 10;
1693 //int list[nSize] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
1694 int list[nSize] = { 11, 33, 55, 77, 999, 222, 44, 66, 88, 10 };
1695
1696
1697 int a = sizeof(list)/sizeof(int);
1698
1699
1700 cout << "原始数据: ";
1701 for (int i = 0; i < nSize; i++)
1702 {
1703 cout << list[i] << " ";
1704 }
1705 cout << endl;
1706 cout << endl;
1707
1708 //外层循环是趟数
1709 for (int n = 0; n < nSize;n++)
1710 {
1711 cout << "第" << n + 1 << "趟: ";
1712
1713 //内层循环比较大小
1714 for (int i = 0; i < nSize - 1;i++)
1715 {
1716 if (list[i] > list[i+1])
1717 {
1718 swap(list[i], list[i + 1]);
1719 }
1720 }
1721
1722 for (int i = 0; i < nSize; i++)
1723 {
1724 cout << list[i] << " ";
1725 }
1726
1727 cout << endl;
1728
1729 }
1730 cout << "-----------------------" << endl;
1731 for (int i = 0; i < nSize;i++)
1732 {
1733 cout << list[i] << " ";
1734 }
1735
1736
1737 }
1738
1739
1740 */
1741
1742
1743
1744
1745
1746 /*
1747 #define 的用法,3个特殊的符号
1748 #
1749 ##
1750 #@
1751 */
1752
1753
1754
1755 //用指针访问对象的成员
1756 TestObject *p = new TestObject;
1757 cout << sizeof(p) << endl;
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921 cout << endl;
1922 system("pause");
1923 return 0;
1924 }