sizeof( ) 显示内存空间
float 4 字节
double 8 字节
char 1 字节
指针 4 字节( 32位操作系统 )
8 字节( 64位操作系统 )
节省空间
转义字符
n 换行
\ 反斜杠字符
t 占八个位置
小数之间不可以做取模运算
++i与i++
前置递增(++i)先加一 然后运算
后置递增(i++)先运算 然后加一
逻辑运算符
!非 && 与 || 或
三目运算符
a ? b : c 如果 A 则 B 否则 C;
随机数
rand()%100 //生成0 ~ 99 的数
随机种子 ctime 头文件 + srand((unsigned int)time(NULL))
goto 语句 跳转语句 ( 不常用 )
goto FLAG ;做标记 FLAG;
冒泡排序 ( -1 可能是为了节省空间)
for ( int i=0;i for(int j=0;j 二维数组名 可以查找二维数组空间 可以获取首地址 空指针不可访问 const修饰指针 指针的指向可以改,值不可以改( const int * p )常量指针 指针的指向不可以改,值可以改( int * const p ) 指针常量 遍历就是逐个访问 容器中的东西 结构体中const 的使用 可以防止误操作 C++ 的四大分区 exe未执行前 1、代码区 存放二进制代码 ( CPU的指令 ) 2、全局区 全局变量、静态变量( static 关键字)、常量 exe执行后 3、栈区 编译器保留一次 4、堆区 由程序员操作 用new开辟数据 delete释放(释放数组 delete [ ] ) 引用 ( & + A ) 需要初始化 在初始化后,不可以改变 引用作为返回值 1、不要返回局部变量的引用 2、函数的调用可以作为左值 & + A 等效于 int *const A 常量引用 用来修饰形参,防止误操作 函数的重载 1、函数名相同 2、同一作用域 3、类型不同,参数不同 类和对象 权限 public 都可以访问 private 类外不可以 protected 类外不可以 访问私有权限 可以通过 public 函数 访问 构造函数分类即调用 无参构造 有参构造 拷贝构造函数 ( const + 类名 + & + [ ] ) 1、括号法 2、显示法 3、隐式转换法 拷贝构造函数的调用 值的方式传数据 值的方式返回数据 构造函数的调用规则 默认构造 析构函数 拷贝构造 深拷贝和浅拷贝 浅拷贝:简单的赋值操作 ( 堆区重复释放 ) 深拷贝:在堆区开辟空间 初始化列表 类名 ():属性名( 数值 )~~~~ 静态成员函数只能访问静态变量 this 指针 空指针调用成员函数 ( 不可以访问属性 ) const修饰成员函数 函数 ()+const 属性不可以修改 mutable + 属性可以 const + 对象·( 不可以修改 ) 常对象 只能调用 常函数 友元函数 friend+函数 左移运算符 ostream & operator<< ( ostream &cout,类名 & p){ return cout; } 文件操作 ofstream:写操作 ifstream: 读操作 fstream: 读写操作 文本文件 写文件: 1、头文件 #include 2、创建流对象 ofstream ofs; 3、打开文件 ofs.open ( " 文件路径 ",打开方式) 4、写数据 ofs<<"写入数据"; 5、关闭文件 ofs.close(); 文件打开方式 1、iOS::in 为读文件而打开文件 2、iOS::out 为写文件而打开文件 3、iOS::ate 初始位置:文件尾 4、iOS::app 追加方式写文件 5、iOS::trunc 如果文件存在先删除,在创建 6、iOS::binary 二进制方式 读文件 1、头文件 #include 2、创建流对象 ifstream ifs; 3、打开文件 ifs.open ( " 文件路径 ",打开方式) 4、读数据 四种方法 1、while( ) 5、关闭文件 ifs.close(); 二进制文件 打开方式指定为 iOS::binary 写文件 1、头文件 #include 2、创建流对象 ofstream ofs(“文件路径”,iOS::out|iOS::binary); 3、打开文件 ofs.open ( " 文件路径 ",iOS::out|iOS::binary) 4、写文件 ofs.write((const char *)& 对象, sizeof(类名)); 5、关闭文件 ofs.close(); 读文件 1、头文件 #include 2、创建流对象 ifstream ifs; 3、打开文件 ifs.open ( " 文件路径 ",iOS::out|iOS::binary) if (!ifs.is_open ()){ cout<<"文件打开失败"< return; } 4、读文件 ifs.read((char *)& 对象 ,sizeof(类名)); cout<<。。。 5、关闭文件 ifs.close(); 模板函数 template template --- 声明创建模板 typename --- 数据类型 普通函数优先于模板函数 可以用空模板强制调用 模板函数不是万能的 学模板不是为了写,而是在STL中运行系统提供的模板 STL vector容器 vector for_each(元素位置,调用函数) 头文件 algorithm string 类 string和char*的区别 char*是指针 string是包含char*的容器 string s string s2(s1) string s3(个数,‘ 字符 ’) string的赋值操作 str.assign( 个数,字符串 / 字符) string字符串拼接 += 符号( 表示拼接 ) str.append ( 字符串 ,截取位置 ,截取长度 ) 表示拼接 string的查找和替换 str.find ( " 字符 / 字符串") find 从左向右找 rfind 从右向左找 str.replace ( 开始 , 结束 ,”字符串“) string字符串的比较 str.compare ( str 1) == 0 str = str1 str.compare ( str 1) > 0 str > str1 str.compare ( str 1) < 0 str < str1 string字符存取 通过 at( ) 函数来访问和修改 string插入和删除 str.insert( 插入位置 ,字符串) 插入 str.erase( 开始 ,结束 ) 删除 string子串 str.substr( 开始 ,结束) 提取子串 vector容器 ( 单端数组 ) vector容器的构造函数 vector vector vector容器赋值操作 v .assign ( v1.begin( ) , v1.end( ) ) vector容量和大小 v1.empty( )判断容器是否为空 v1.capacity( )容器的容量 v1.size( )容器的大小 v1.resize( )重新指定大小 pop_back( )删除最后一个元素 clear( ) 删除容器中所有元素 font( )访问第一个元素 back ( ) 访问最后一个元素 vector容器 互换容器 v1.swap(v2) 互换容器 vector vector预留空间 减少 动态扩展次数 v.reserve( 长度 ) deque容器 vector从头部插入 deque相对,对头部的插入删除速度较快 vector访问元素速度比deque快 有中控器维护缓冲区的地址 deque几乎与vector一样 deque没有容量的概念 push-back()尾插 push-front()头插 insert(插入位置,个数 ,字符串) deque排序 头文件 algorithm sort( 开始位置 ,结束位置 ) stack容器 ( 栈顶 ,栈底 ) push入栈 pop出栈 栈不允许有遍历 查找 栈顶元素 s.top( ) queue容器 ( 先进先出 ) 只有队头和队尾能被外界访问,没有遍历 push入队 pop出队 list容器 ( 可以快速插入和删除 ,遍历速度不快 ,占用空间较大 ) list的优点 动态存储分配,不会造成浪费和溢出 插入删除十分方便 list的缺点 空间和时间较大 插入和删除都不会造成原有迭代器失效但是这在vector是不成立的 list.swap( )交换功能 list.reverse( )反转 list.sort( )排序 从小到大 从大到小 定义bool函数mycompare( int v1 , int v2){ return v1 > v2 ; } set容器 ( 插入时自动排序 ) 二叉树实现的 set没有重复元素 multiset可以有重复元素 插入数据只有insert( ) s1.swap( s2 )交换 set的查找和统计 find( )查找 count ( ) 统计 结果是 0 / 1 pair对组的创建 pair< 类名 1 ,类名 2 > 输出用 p.frist p.second set容器排序 set中包含pair 用仿函数排序的 仿函数 class compareperson { bool operator()(const 类名 & ,const 类名 &) { return p1.m_age > p2.age; } } map/multimap容器 map中的元素都是pair 第一元素为key值,第二元素为value map不允许有重复,multimap可以重复 可以根据key值快速找到value值 插入make-pair( , ) m[ n ] = 数值; 函数对象(仿函数)是一个类 仿函数可以作为参数传递 谓词 一元谓词 find-if(v.bigin() , v.end() ,类名()) 二元谓词 内建函数对象 头文件 functional 算数仿函数 nagate 一元仿函数 取反仿函数 plus 二元仿函数 加法 minus 减法仿函数 mutiplies 乘法仿函数 divides 除法仿函数 modulus 取模仿函数 关系仿函数 大于 greater greater 逻辑仿函数 逻辑非 logical-not 逻辑与 logical- 逻辑或 logical- transform( v.begin(),v.end(),v2.begin(),logical-not<类名>) stl常用算法 头文件 algorithm stl中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改 numeric 体积很小,只包含简单的数学运算函数 functional 定义模板类,声明函数对象 遍历算法 for-each(v.begin(),v.end(),函数名 ) 搬运到目标容器中 transform( v.begin(),v.end(),v2.begin(),logical-not<类名>) (目标容器要提前开辟空间) 查找算法 1、find(查找区间 ,查找对象 ) 自定义类型需要重载== 2、find-if(查找区间,函数名/谓词(返回bool类型的仿函数)) 3、相邻重复元素 adjacent-find(查找区间) 4、二分查找 binary-search(查找区间,目标值) 查找的数组必须是【有序】函数 统计元素个数 count(统计区间,目标值) 内置 自定义 count-if(统计区间,仿函数) 排序算法 1、排序( 默认从小到大 ) sort( 排序区间 ,谓词函数 ) 2、洗牌打乱顺序 random-shuffle( 打乱区间 )加随机种子 3、将容器合并 merge( v1区间,v2的区间 ,目标容器的起始位置 ) (要分配空间) 两个容器必须是有序的 4、反转 reverse( 反转区间 ) 常用的拷贝和替换算法 拷贝 copy(v1的区间 ,目标容器的区间) (要分配空间) 替换 replace(替换区间 ,要替换的值 ,替换的值) 按条件替换 replace-if( 替换区间 ,谓词函数 ,替换的值 ) 互换 swap( 容器1 ,容器2) 要求同种容器 常用算术生成算法 numeric(头文件 ) 容器元素的累加 accumulate( 算数区间 ,累加起始值) 填充 fill( 填充区间 ,填充数) 常用的集合算法 min( 取较小的值 ) 1、交集 set-intersection(v1区间,v2的区间 ,目标容器的起始位置 )(开辟空间) 两个集合必须是有序序列 【返回目标容器最后元素的迭代器地址】 2、并集 set-union(v1区间,v2的区间 ,目标容器的起始位置 )(开辟空间) 【返回目标容器最后元素的迭代器地址】 3、差集 set-different(v1区间,v2的区间 ,目标容器的起始位置 )(开辟空间) 【返回目标容器最后元素的迭代器地址】



