
1. C++ Primer 学习笔记
梦幻DUO
游戏开发爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
声明和定义变量、const限定符和引用、简单的类类型需注意点
声明变量:extern int a;//不能初始化定义变量:extern int a = 10;//若extern后面有初始化,就是定义int a = 10;//这是最常见的定义const限定符和引用:const int a = 10;//常用的用法const int &b = a;//可以int &c = a;//这是非法的,因为a是const常量,如果可原创 2015-01-06 22:31:27 · 646 阅读 · 0 评论 -
C++ 函数参数传递-传递指向指针的引用
#include//不是交换两个数,是交换两个int类型的指针void ptrswap(int *&v1, int *&v2)//v1、v2是int类型的指针{ int *tmp = v2; v2 = v1; v1 = tmp;}int main(){ int i = 10; int j = 20; int *pi = &i; int *pj = &j; ptrswa原创 2015-01-31 00:26:48 · 482 阅读 · 0 评论 -
C++ 标准IO库:面向对象的标准库
1、继承:基类->派生类2、3个头文件3、9个标准库类型4、IO对象不可复制或赋值原创 2015-01-31 17:27:07 · 527 阅读 · 0 评论 -
C++ main函数:处理命令行选项
int main(int argc, char **argv)//也可以写成char *argv[],argc是个数,argv每个选项是一个字符串注意:argv[0]是命令,不是命令行选项原创 2015-01-31 10:02:12 · 923 阅读 · 0 评论 -
C++ 重载与作用域
1、变量屏蔽(变量隐藏)2、函数屏蔽(函数隐藏)而不是函数重载3、每一个版本的函数重载都应该在同一个作用域中声明4、注意:局部地声明函数是一种不明智的方法-函数的声明应该放在头文件原创 2015-01-31 12:33:31 · 586 阅读 · 0 评论 -
C++ 重载函数:实参类型转换
一、转换等级1、精确匹配2、通过类型提升char to int to float long to double 等短到长的提升float和long优先级一样,可以函数重载,但不能通过类型提升来区分重载函数,具有二义性3、通过标准转换A、从任何整数类型或枚举类型到其他整数类型(除了提升)B、从任何浮点类型到其他浮点类型(除了提升转换)C、从任何整数类型到原创 2015-01-31 14:48:43 · 747 阅读 · 0 评论 -
C++使用预处理器进行调试
1、预处理指令#ifndef NDEBUGcerr #endif2、附加选项:(项目-右键属性-C/C++-命令行-其他选项)/DNDEBUG3、预定义常量__FILE____LINE____TIME____DATE__4、assert断言assert(条件);//当条件为否的时候会显示错误信息原创 2015-01-30 22:52:19 · 525 阅读 · 0 评论 -
C++ 函数参数传递-非引用形参
非引用形参:1、普通形参非const普通形参:可以传所有类型的普通实参cosnt普通形参:可以传所有类型的普通实参,但不能修改const普通形参的值2、指针形参非const指针形参不能通过非const形参来修改const实参,因此只能传非const指针实参cosnt指针形参可以 传所有类型的指针实参,但不能修改const指针形参的值3、复制实参的局限性原创 2015-01-30 23:59:20 · 588 阅读 · 0 评论 -
C语言指针图解
原创 2015-01-13 19:41:36 · 716 阅读 · 1 评论 -
C++ 输入流的条件状态
1、cin.bad()输入流发生严重的问题2、cin.fail()输入流中遇到不能转换为数字的字符3、cin.eof()输入流到了结尾4、cin.good()输入流正常,没有发生以上任何一种情况5、cin.clear()恢复流的所有状态,恢复到正常6、cin.ignore(200,'\n')清除流中前200个字符或遇到了换行符之前的全部字符7、cin原创 2015-02-01 11:01:45 · 980 阅读 · 0 评论 -
C++ 标准异常类
1、bad_alloc:#include #include //new 头文件里有异常类using namespace std;class Dog{public: Dog() { parr = new int[1000000]; }private: int *parr;};int main(){ Dog *pDog; try{ for(int i=1;原创 2015-01-30 20:39:58 · 685 阅读 · 0 评论 -
C++ 函数参数传递-数组形参
1、三种传递数组的写法下面这三种写法本质是一样的:void fun1(int *x, size_t size);void fun2(int[] x, size_t size);void fun3(int[10] x, size_t size);//这个10其实是没用的,编译器会忽略掉2、形参的长度会引起误解3、数组实参-数组会悄悄地转化为指针4、通过引用传递数组vo原创 2015-01-31 09:05:06 · 1089 阅读 · 0 评论 -
C++ 内联函数inline
1、内联函数避免函数调用的开销2、把内联函数声明和定义只放入头文件,不能放入源文件3、注意:内联说明对于编译器来说只是一个建议,编译器可以选择忽略这个建议,递归函数、大函数不太可能在调用点内联展开原创 2015-01-31 10:37:33 · 396 阅读 · 0 评论 -
C++ 指向函数的指针
1、用typedef简化函数指针的定义typedef bool (*cmpFcn)(const string &, const string &);cmpFcn p1;//p1是函数指针2、函数指针形参void useBigger(const string &s1, const string &s2, bool(*pf)(const string &, cosnt string &原创 2015-01-31 17:03:18 · 465 阅读 · 0 评论 -
C++ 异常
1、传统的处理方法if(……)return result;在其他函数:swtich(result){case :....;break;case:...;break;}2、现代的处理方法:处理异常throw异常类型:try{ }catch(int a)//抛出数字{ }catch(const char * a)//抛出字符串原创 2015-01-30 20:37:22 · 478 阅读 · 0 评论 -
C++ 函数声明
1、一个函数只能定义一次,但是可以声明多次。2、函数原型:函数返回类型、函数名、形参列表函数声明中可以省略形参名,但必须有形参列表(就是指明形参的类型)3、函数在头文件中声明,在源文件中定义定义函数的源文件中也要包含声明头文件4、默认实参既可以在函数声明也可以在函数定义中指定默认实参,但不可以同时指定默认实参,只能在一方指定通常是在函数声明中提供默认实参原创 2015-01-31 10:19:01 · 754 阅读 · 0 评论 -
C++ 类的成员函数
1、函数原型必须在类中定义2、函数体在类中定义函数体或在类外定义函数体(一般都是在类外定义函数体,只有函数很短的时候才会在类里面定义函数体)3、this指针表示当前的类对象4、const成员函数:在函数头后面加上const表示该方法不会修改成员函数原创 2015-01-31 10:55:09 · 460 阅读 · 0 评论 -
C++ 函数参数传递-vector和其它容器类型的形参
1、不要使用普通的非引用vector形参!2、要使用引用形参传递vector3、传递vector的迭代器更好原创 2015-01-31 08:31:23 · 1192 阅读 · 0 评论 -
C++ return语句
1、两种形式return ;return 返回值;2、具有返回值的函数1、主函数main的返回值2、返回非引用类型int fun(int &x);//返回的是复制3、返回引用int& fun(int &x);//返回的就不是复制一份,返回的是x自身!4、千万不要返回局部对象的引用5、引用返回左值fun(a)=6;//返回引用时可以作左值6、千万不原创 2015-01-31 10:07:52 · 440 阅读 · 0 评论 -
C++头文件
头文件用于声明,不用于定义:1、类的定义(也叫声明)2、外部变量的声明3、函数的声明4、但一些const对象和可以定义在头文件里防止头文件重复包含:#ifndef _DEMO_H#define _DEMO_H#endif原创 2015-01-12 21:26:32 · 509 阅读 · 0 评论 -
C++ 迭代器
不是所有的容器都支持下标访问,但是所有容器都支持迭代器vector::iterator iter = v.begin();//begin()返回第一个迭代器指向第一个数据元素*iter = 9;//迭代器实际上是一个指针iter++;下标方式访问:for(vector::size_type ix=0; ix != v.size(); ++ix)cout 迭代器访原创 2015-01-15 20:19:47 · 405 阅读 · 0 评论 -
C++ 标准库bitset类型
1、bitset对象的定义和初始化用string对象初始化bitset对象用unsigned值初始化bitset对象2、bitset对象上的操作测试整个bitset对象访问bitset对象中的位对整个bitset对象进行设置获取bitset对象的值输出二进制位bitset a;//32位二进制,全部都是0bitset b(0xffff原创 2015-01-16 10:32:24 · 536 阅读 · 0 评论 -
C++ 指针和const限定符
1、指向const对象的指针const double *p;//指向的必须是const的对象2、const指针double * const p = π//必须初始化3、指向const对象的const指针const double * const p = &a;//必须初始化,且指向的必须是const的对象4、指针和typedeftypedef string *pst原创 2015-01-17 10:40:01 · 473 阅读 · 0 评论 -
C++ 创建动态数组
静态数组放在堆栈,动态数组放在堆-自由存储区c语言创建动态数组:int *p = (int *)malloc(n * sizeof(int));free(p);c++创建动态数组:int *pia = new int[n];//内置类型没有初始化string *psa = new string[10];//默认的构造函数初始化int *pia2 = new int[原创 2015-01-17 19:12:48 · 1060 阅读 · 0 评论 -
C++ 新旧代码的兼容
旧代码:数组和C风格字符串新代码:vector和string相互转换:C风格字符串->string:string st("Hello World");st = st + " bill";数组->vector:const size_t arr_size = 6;int int_arr[arr_size] = {0,1,2,3,4,5};vector ive原创 2015-01-17 20:05:09 · 574 阅读 · 0 评论 -
C++ 多维数组
int ia[rowSize][colSize];方法一:cout 方法二:int (*p)[4];p = ia;for(p = ia; p != ia + 3; ++p){ for(int *q = *p; q != *p + 4; ++q) cout << *q << " "; cout << endl;}方法二:typedef int i原创 2015-01-19 13:18:40 · 560 阅读 · 0 评论 -
二进制和十六进制
十进制:权值:各位表示10的幂(1、10、100、1000……)二进制:权值:各位表示2的幂(1、2、4、8、16、32……)十六进制:权值:各位表示16的幂(1、16、256……)二进制转十进制和十六进制转十进制:各权值*该位的数字相加起来十进制转二进制和十进制转十六进制(原理都是逆序排序):逆序排序法:十六进制与二进制的联系:四位二进原创 2015-01-15 22:55:56 · 545 阅读 · 0 评论 -
C++ set(集)和multiset(多集)
一、set(集)、multiset(多集)set的含义是集合,它是一个有序的容器,里面的元素都是排序好的。#include 二、红黑树(数据结构)三、基本操作set a;multiset ma;1、inserta.insert(60);ma.insert(a.begin(),a.end());2、count:cout find原创 2015-02-15 22:45:37 · 736 阅读 · 0 评论 -
C++ STL 算法:元素计数
一、通用算法:#include #include //预定义函数对象和函数适配器一元谓词:返回值为bool类型的函数或函数对象,且参数只有一个,如:bool isEven(int elem){ return elem % 2 == 0;}1、countnum = count(ivec.begin(), ivec.end(), 4);cout原创 2015-02-16 11:29:26 · 930 阅读 · 0 评论 -
C++ STL 算法:查找算法(7) lower_bound、upper_bound、equal_range
1、lower_bound()pos1 = lower_bound(ilist.begin(), ilist.end(), 5);cout 2、upper_bound()pos2 = upper_bound(ilist.begin(), ilist.end(), 5);cout 3、equal_range()pair::iterator,list::iter原创 2015-02-16 14:04:51 · 573 阅读 · 0 评论 -
C++ STL 算法:复制元素
一、copy()1、copy(ilist.begin(), ilist.end(),ivec.begin());2、list ilist;copy(ivec.begin(), ivec.end(), back_inserter(ilist));3、copy(ivec.begin(), ivec.end(),ostream_iterator(cout, " "原创 2015-02-16 15:17:42 · 470 阅读 · 0 评论 -
C++ 顺序容器的操作(1)size_type、iterator、const_iterator、difference_type
1、size_type:其大小足以保证存储内存中对象的大小。2、iterator:迭代器3、const_iterator:常迭代器。常对象调用begin或end返回的是常迭代器。4、 difference_type:不同元素直接的距离原创 2015-02-15 16:43:28 · 1670 阅读 · 0 评论 -
C++ 顺序容器的操作(4) 容器大小的操作size、max_size、empty、resize
1、容器大小的操作c.size();c.max_size();//最大能装多少个对象c.empty();c.resize(n);c.resize(n,t);//容器调整到大小为n,新增的数据用t来填上注意:resize操作可能会使迭代器失效原创 2015-02-15 17:21:51 · 1201 阅读 · 0 评论 -
C++ 顺序容器的操作(7) 赋值与交换=、swap、 assign
一、赋值与交换1、c1 = c2;2、c1.swap(c2);3、c1.assign(b,e);//b和e是两个迭代器4、c1.assign(n,t);//n个t二、使用swap:类型必须相同三、使用assign:类型兼容即可原创 2015-02-15 17:43:59 · 1649 阅读 · 0 评论 -
C++ STL 算法:查找算法(1)find、find_if
find(b,e,t)例:list::iterator pos1 =find(ilist.begin(), ilist.end(),4);find_if(b,e,op)例:pos = find_if(ivec.begin(), ivec.end(), bind2nd(greater(),3));例:pos = find_if(ivec.begin(), ivec.end()原创 2015-02-16 12:40:16 · 1233 阅读 · 0 评论 -
C++ STL 算法:查找算法(4)find_first_of
1、find_first_of(b,e,sb,se)例:find_first_of(ivec.begin(),ivec.end(),searchList.begin(),searchList.end());cout 2、find_first_of(b,e,sb,se,bp)3、没有find_last_of算法,只能使用逆向迭代器vector::reverse_iterato原创 2015-02-16 13:27:38 · 631 阅读 · 0 评论 -
C++ STL 算法:替换算法
1、replace(b,e,ov,nv)replace(ilist.begin(), ilist.end(), 6, 42);2、replace_if(b,e,p,v)replace_if(ilist.begin(), ilist.end(),bind2nd(less(),5),0);3、replace_copy(b1,e1,b2,ov,nv)replace_copy(原创 2015-02-16 16:44:41 · 494 阅读 · 0 评论 -
C++ STL 算法:删除算法(1)remove、remove_if
一、remove(b,e,v)end = remove(ilist.begin(), ilist.end(),3);//返回的迭代器是逻辑终点(即被移动后的第一个多余元素),而非真正的终点ilist.erase(end,ilist.end());//配合erase就可以做到真正的删除ivec.erase(remove(ivec.begin(),ivec.end(),5),ive原创 2015-02-16 17:01:16 · 804 阅读 · 0 评论 -
C++ STL 算法:对所有元素排序
1、sort(b,e)sort(ideq.begin(),ideq.end());//谓词默认是less,从小到大2、sort(b,e,p)sort(ideq.begin(), ideq.end(), greater());//从大到小3、stable_sort(b,e)4、stable_sort(b,e,p)stable_sort(svec2.begin(), s原创 2015-02-16 21:43:22 · 396 阅读 · 0 评论 -
C++基本内置类型
C++算术类型bool布尔型char字符型wchar_t宽字符型short短整型int整型long长整型float单精度浮点型double双精度浮点型long double扩展双精度浮点型这么多类型,如何选择?整数用整型类型原创 2015-01-04 10:33:31 · 570 阅读 · 0 评论