clutter recoder

cin >> ch;

cin.get(ch);区别读取输入是否忽略空格、制表等;

char ch;
int count = ;
cout << "Enter characters;enter # to quit: \n";
cin.get(ch);
while (ch != '#')
{
cout << ch;
++count;
cin.get(ch);
}
cout << endl;
cout << count << " characters read \n";

cin >> ch;忽略空格等输入并 不计入字符输入统计的范畴内;

cin.get(ch)则不忽略空格等,同时通过控股等计数;

两个输入 都预先被缓冲,按下键盘时发送给程序处理;

对于vector 可伸缩长度的数组 除了在尾部插入 删除数据 其他 任何部分插入 删除数据线性的复杂度
vector 除了再尾部插入 删除 效率恒定 在头部 中间 做删除 插入操作 效率都是线性的
访问vector可以根据下标直接访问 访问任何位置的元素 效率都是恒定

基本关联式容器

set multiset map multimap map set;
数学中集合

容器适配器
基本容器实现的新容器
新容器可以描述更高级的数据结构
容器适配器有3种
Stack queue priority
priority_queue
stack queue priority_queue
先进后出特性
queue 队列 先进先出特性
priority_queue带优先级的队列 元素可以按照某种优先级顺序进行
定义了 一个stack容器实体
入 push pop出 即删除顶数据
top
返回顶 但是并不删除
empty 判断是否为空

输入流 输入的过程是這样的 键盘输入完数据按下回车键 该行数据就被写入输入缓冲区 之后输入操作符从缓冲区提取数据 提取过程中忽略空格 tab键 换行符等空白字符
输入流正常cin返回值true
cin遇到错误的字符或文件结束符

文件结束标识采用宏定义形式定义出来的
宏定义
#define EOF (-1);
cin直接进行忽略 而是将它们当成一个字符运行用户按下enter会将先前的输入全都输出
但并不是enter就是文件结束符enter不是文件结束符
程序运行之所以会发生這样的情况
因为enter键带动一次清扫缓冲区行为每当用户输入一行字符串按下 enter 清扫一次缓冲区

将先前输入内容从缓冲区读出
文件结束符 在不同的编译器
带有一个参数的get函数
带有一个参数的get函数 参数是一个char型变量 用于存放读入的单个字符 同时函数的返回不再是读入的字符而是bool
读取成功是 返回非零 读取失败返回0相当于false 此时停止读入字符

带3个参数
第一个参数是 字符数组或是字符指针
用于将读入的字符串
函数读取成返回一个非0

0

读入失败或是遇到文件终止返回0 false;

数组 指针 长度 结束标志;

结束符

第一次读取 还没有读到指定长度的字符时 就已经碰到 结束字符了
getline读取输入的字符终止字符不被读入
碰到一个终止字符终止本次读入操作 然后指针向后移动一位

eof用于判断读入数据是否遇到文件结束符
如果遇到文件结束符则返回true

功能是从输入流中读入一个字符

get遇到空格 tab换行符
char

带有一个参数的get 参数是char 用于存放读入的单个字符
同时函数的返回值不再是读入的字符而是bool类型 读取成功函数返回非0

带有一个参数的get函数,其参数是一个char型变量,用于存放读入的单个字符
函数的返回值不同无参的get() == eOF返回读入的字符而是返回布尔
车工读取返回一个非0值,失败返回0false
c.get(a)

char a;
while(cin.get(a))//读取成功时

带有3个参数的get函数第一个参数是字符数组或字符指针 用于将读入的字符串存入到字符数组或指针所指向的内存空间

用于将读入的字符串存入到字符数组或指针所指向的内存空间
第二个参数为读入字符个数 最后一个参数读取的终止字符
如果未读满指定的个数就碰到终止字符 字符 会提前终止读入字符 函数读取成功返回一个非0
读入失败或遇到文件终止符则返回0 false

带有3个参数的get函数第一个参数是字符数组 字符指针

带有3个参数的get函数第一个参数是字符数组或字符指针,用于将读入的字符串存入到字符数组或指针所指的内存
第二个参数为读入字符个 最后一个读取的
依次读入输入字符 调用get函数 每次读入的字符只有9个
这是因为字符数组末尾'\0';
getline

终止符不是
using文件结尾 跳出循环;

eof用于判断读入数据是否遇到文件结束符

cin.eof

cin.eof()用于判断读入数据是否遇到文件结束符,如果遇到文件结束符True

peek
用于返回当前指针所指的字符 返回当前指针所指的字符
并且不会移动指针
如果当前指针所指向的是文件结束符
-1 EOF
putback 将get getline函数读取到的字符重新插入到缓冲区当前指针所指位置 后面任然读取字符

putback(char)函数是将get或getline函数读取到的字符重新插入到缓冲区当前指针所指的位置
文本文件 二进制文件;

文本文件每一个字节存放是一个ASCII,代表一个字符
二进制文件是将内存中的数据按照其在内存中的存储形式
二进制文件是将内存数据按照其在内存中的存储形式原样存放在磁盘 文本文件用记事本打开,显示的是字符

记事本打开二进制文件则显示乱码
文本文件
cout cerr iostream
文件操作fstream

ifstream
ofstream
文件打开操作
ifstream ofstream 成员函数 函数用于类的对象调用
open函数
第一个参数是需要打开的的文件名 参数可以是字符指针字符数组
输入输出
输入输出格式
ios::in 以输入方式打开文件
ios::out 输出方式打开 ofstream output("output.tct",ios::out)文件不存在新建 文件存在就将原有内容全部清空

append

输出的数据追加到文件末尾
iso::app
ios::ate打开文件并将指针定位到文件末尾
打开 并将指针定位到文件末尾
指针定位到文件末尾

ios::trunc

打开文件 文件不存在创建 存在 清空原有文件内容
truncate

ios::binary 二进制方式打开

ios::二进制方式打开,如果不指定则默认采用文件方式打开
ios::in | ios::out

ios::in | ios::bingary

ios::out | ios::binary
ios::out | ios::binary

0 false

open函数打开失败返回0 false
程序中检测文件是否打开成功

为文件处理完数据 关闭
Object.close();

文本文件的读写操作 两种 方式
输入输出操作符
<< >>

put
get getline
函数只能用于处理字符
输入输出操作符
>> << 重载了 输入输出操作符 可以处理所有内建数据类型
从文件输入输出与 标准输入输出其实一样
只不过将类对象cout cin 换成了 ofstream ifstream

先从input.txt 文件读取数据存入数据 然后再将数组数组打印到显示器 之后再将数据写入到output.txt

ofstream类定义对象用于输出文件
ifstream类定义对象输入到文件
用fstream类定义对象用于从文件输入 又能输出到文件
针对二进制文件的读写
针对二进制文件的读写输入输出类定义
针对二进制文件的读写,输入输出类中定义了专门的函数read write
istream & read(char * buffer,int size);

ostream & write(const char * buffer,int size)

char指针buffer是指向内存中的一段存储空间
char指针是只想内存中的一段存储空间
size 存储空间大小
需要读写内容的字节数
读写二进制的函数
系统提供了一些操作文件读写指针位置的成员函数
操作文件读写指针位置的成员函数
将文件读写指针移动到指定位置并操作数据
操作文件读写指针
操作文件读写位置的 将文件读写指针移动到指定位置并操作数据

gcount()返回最后一次输入所读入的字节数
tellg()返回输入指针当前位置

seekg将输入文件中指针移动到指定的位置
seekg

cin对象
char字面值
书写字符常量方式多种

char字面值
书写字符常量常规字符 将字符用单引号括起来
字符的数值编码

ASCII

数值编码 字面值 更加清晰 不需要知道编码

这种初始化常用于给复杂的数据类型提供值列表

变量的类型可能无法赋予给它的值

条件是编译器知道目标变量能够正确地存储赋给它的值

const int code = 66;

计算表达式中 bool char unsigned char signed char short int
整形提升
char signed unsigned char short 转成int

(typeName) value
typeName (value);

变量初始化
4个强制类型转换

static_cast<>

static_cast<typeName> (value);
C++引入4个强制类型转换运算符
static_cast可用于将一个

static_cast<>比传统强制类型转换严格
c强制类型转换由于有过多的可能性及其危险

my double Eleven Shopping list/wishlist:
first: a pair of fake leather shoes;
second: a fashion jacket;
third: nice business pants;
fourth: handsome business shoulder bag;
signature:Ruiy.

cin对象支持3种不同模式的单字符输入;其用户接口各不相同
while循环中使用模式
sentinel character;
程序在输出时省略了空格
cin忽略空格换行符
cin 读取char值 与读取其他基本类型一样 cin将忽略空格和换行符 cin忽略换行符和空格 输入的空格没有被回显 也没有被包括在计数内
cin输入被缓冲

cin输入被缓冲 意味着只有用户按下回车键 他的输入内容才会被发给程序
就是运行程序时 可以在#终止输出字符后面输入别的字符的原因 按下回车键 整个字符序列被发送给程序 但程序在遇到#后结束对输入的处理
cin输入被缓冲
按下回车键 输入才会被发送程序
cin对象忽略换行符和空格

输入先被缓冲,按下回车键再被发送给程序处理
cin.get()
读取字符输入,键盘或是来自文本文件
逐个字符读取输入的程序需要检测每个字符
逐个字符读取输入的程序检查每个字符 空格 制表换行
逐个字符读取输入的程序需要检测每个字符
cin所属类istream中包含一个能够满足这情况成员函数
具体地说,成员函数cin.get(ch)读取输入中的下一个字符(即使是空格)并将赋给变量ch
cin >> ch
cin.get(ch);

现在 程序回显每个字符
cin.get(ch)调用将一个值放入ch,意味修改变量
C中要修改变量值 将变量的地址传递给函数
引用类型
cin.get(ch)调用将一个值放在ch变量
這意味着修改该变量值c中要修改变量的值 需将变量的地址传递给函数
只需要将参数申明为引用
引用C++新数据类型;
函数可以修改参数的值
cin.get()的一个版本接受两个参数
数组名 字符串char*的地址
数组名是第一个元素的地址 字符串数组名的类型char*
cin.get()不接受任何参数
函数重载的oop特性
cin.get()
cin.get(ch)
cin.get(arr,size);
函数重载允许创建多个同名函数 条件是参数类别
编译器将找到char* int作为参数的cin.get()版本
文件尾条件
输入结束难令人满意
這样的符号可能就是合法输入组成部分
输入来自于文件,使用功能更强大技术 输入来自于文件 使用功能更强大技术 检测文件尾
EOF
C++输入工具和操作系统协同 检测文件尾并将信息告知程序
读取文件信息 cin和键盘输入

上一篇:GCD详解


下一篇:SQL中varchar和nvarchar的区别