您的当前位置:首页C++期末笔记知识点

C++期末笔记知识点

2022-06-30 来源:六九路网
1.老版的I/0库的头文件为,新版的1/0库的头文件为 2.一个C++程序开始执行时将自动打开四个内置流: Cin 标准输入流 Cout 标准输出流 cerr 标准错误输出 clog cerr的缓冲版本

3. 标准C++还定义了四个附加流: win, wout, werr, wlog, 它们都是宽字符 版本的标准流。 4.格式化的I/0 流

1) 利用ios成员进行格式化

●设置skipws时,开始的空白字符(空格,换行)在输入流的时候将被丢弃。 ●设置了showbase川以显示数字的基数。例如十六进制数1F将显示0x1F; ●当设置fixed时,则用普通计数法显示浮点数。

●当设置了unitbuf时,缓冲区在每次插入操作之后都会被刷新, 2) 设置格式标记:

➢为了是指一个标记可以用setf ()函数。 Fmtflag setf (fmtflag flags);

例如: stream.set(ios:showpoint I ios::shawpos);

注意:因为格式标记是在ios 类中定义的,必须使用ios和作用域运算符访问他们的值,例:单独用showbase不能被识别,想被识别必须指定ios:: showbase; 3) Unsetf ()可以清除一 个或者多个格式标记。 Void unsetf ( fmtflags flags);

例如: stream.unsetf(ios:showpoint);

Fmtflags setf(mtflags flags1, fntflags flags2);flags2标记被清除,然后根据flags1指定的标记进行设置,注意: flag1 中的标记在flag2中有的标记设置了才生效。

4) Oct, dec, hex域统称为basefield; left, right, internal域称为adjustfield; scientific 和fixed域称为floatfield。

5) 基域,对齐城,浮点域标记互相排斥,在设置一一个标记时必须关闭另一个标记。 6)Fmtflags flags();既可以显示与cout相关的格式标志设置,还可以设首与某个流相关 的所用格式标记。 例:显示格式:

los:: fmtflags f;Long |;

f=(long)cout.flags();for(i=0x4000; i;i=i>>1}if(i&f) cout<<\"1\";else cout<<\"0\";cout<<\"\\n\";设置格式标记:

ls:fmtflags f=ios::showpos | ios:showbase | ios:oct I is:right;Cout.flags(f); 7)使用 width),precion,(,ill()函数可以设置宽度,精度,填充。Couflill(*); 8)利用操作算子格式化1/0

➢改变流的格式参数的另 种方法是使用称为操作算子的些特 妹函数,这些函

数(操作算了)可以包含在I/0表达式中。例: cout<。 9)重载<<和>>

➢<<:插入运算符,>>:提取运算符。重载插入和提取运算符的函数道常称为插入 器和析取器。

➢创建白己的插入器

ostream &operator<<(ostream &stream, class_ type obj){//body of inserterReturn stream;

➢将一个插入器定 义为一个类的友元函数,就可以在插入器中直接访问对象的私 有属性了。

➢创建自己的析取函数:

istream &operator>>(istream &stream, class_ type obj){//body of inserterReturn stream;

5. 为了执行文件的1/0, 必须在程序中包括 6.打开和关闭文件

1)创建 一个输入流,- 个输出流,一个既能输入 也能输出的流。 ifstream inofstream out;➢fstream io; 2) open函数

void ifstream::open(const char *filename, ios:openmode mode =ios:in);

void ofstream::open(const char *filename, ios:openmode mode =ios:out | ios::trunc);void fstream::open(const char *filename, ios;openmode mode =ios:in | ios::out); 3) openmode是有ios定义的个枚举值,mode只能是下列中的一个或者几个: ➢ios:app 会使所有输出流到相应文件的内容都添加到文件末尾。 ios:ate 打开文件时能够定位到文件末尾。 is:binary使 文件以二进制方式打开。,默认都是以文本方式打开的。➢is:trunc 销毁具有相同名字的先前文件内容,并且把文件长度截断为0。➢ios:in ios::out

例: ofstream out;

out.open(\"test' ,ios::out);

4) is_ _open()函数可以检查文件是否被成功打开。如果流链接到一 个打开文件,该流返回 true,否则返回false.

7.无格式和二进制I/0 流1) put ()和get ()函数

istream &get(char &ch)ostream &put(char ch)

get ()丽数从一个调用流中读取一。 个字符并将该字符值放入ch,它返回对该流的

个引用。

➢Put ()函数将ch写入相应的流并返回对该流的一一个引用。➢当遇到文件尾时, 该文件相关的流变成为false .2) read ()和write ()雨数

istream &read(char *buf, streamsize num)

ostream &write(const char *buf, streamsize num )例:

out.writel(char*) &acc, sizeof(struct status));int.read((char*) &acc, sizeof(struct status));

3) get 除了前面讲了还可以以几种不同的方式被重载,如下:

istream &get (char *buf, streamsize num);

istream &get Cchar *buf, streamsize um, char delim);intget()

➢istream &get (char *buf, streamsize num);

把字符读入由buf指向的数组,直到读取到了num-1个字符,发现了换行符,文件尾结束。

➢istream &get (char *buf, streamsize num, char delim);

把字符读入buf数组中,直到读取到了num-1个字符,发现了delim指定字符,文件尾结束。

➢intget ()

返回相应流中的下一个字符。如果遇到文件尾,则返回EOF.4) getline()函数

istream &getline (char *buf, streamsize nurn);

istream &getline (char *buf, streamsize num, char delim);➢istream &getline (char *buf, streamsize num);

把字符读入由buf指向的数组,直到读取到了num-1个字符,发现了换行符,文件尾结束。

➢istream &getlinechar *buf, streamsize num, char delim);

把字符读入buf数组中,直到读取到了num-1个字符,发现了delim 指定字符,文件尾结束

注意: getline ()从输入流中读取并删除分隔符,get ()则把分隔符流留流中。5) eof ()可以检测是否到达了文件尾。例whilel(in.eof()6) ignore()函 数

istream &ignore < streamsize num=1,int_ type delim=EOF ) ;跳过流中的num个字符,或是遇到了EOF终止符提前终止。例: in.ignore(10,\");

7) peek()和putback 0)函数

➢int _type peek();

该函数返回流中的下一字符, 如果遇到文件尾,则返回EOF. ➢istream &putback(char c);

可以返回从个流中读取的最后个字符,c是读取的最后一个字符。8) seekg()函数个 seekp ()可以执行随机访问。

istream&seekg ( off _type offset, seekdir origin)ostream &seekp(off_ type offset, seekdir origin )

获取指针(get pointer):该指针指定文件中下一个输入操作发生的位置:放置指针(put pointer):该指针指定文件中下一一个操作发生的位置。Origin必须是下面二个中的一个: .oS: : beg 文件头los: : cul 当前位置los:: end 文件尾例: in.seekp(8, ios::beg); In. get(c);

9) pos_ type tllg()和pos_ type tellp()函数可以确定每一 一个文件的当前指针位置,它们的返回 直

8.1/0 状态

i/o系统的当前状态保存在一个iostate类型的对象中,它是ios定义的枚举类型: 名字 Ios::googbit ios::eofbit ios::failbit ios::badbit 含义 无错误位设置 当遇见文件尾时为1,否则为0. 出现非致命的i/o错误时为1,否则为0。 出现致命的i/o错误时为1,否则为0。 ➢可以用下面的函数来判断是否出现了错误: bool bad ( )boole eof()bool fail)bool good() 例: whil(lin.baa)...}.

➢可以用clear()删除错误标记。

void clear ( iostate flags=ios:: goodbit);

如果flags是goodbit (默认值),所用的错误标记都将被删除。 9.mutable成员可以被const成员函数修改。

10.volatileintI;表示i是随时可能发生变化的,每次使用它都必须从i的地址中取出。 11.explicit构造函数阻止隐含地创建一一个从参数类型到类类型的转换。

class myclass{

int a; public:

myclass(int x){

a=x; { …

}

myclass ob=4;在加了explicit 后就只能myclass

ob (4)创建对象,不能用前面那种了。

12.--个绑定器可以把一个参数和一-个函数对象绑定在一起,一个取反器将返回 一个谓词的补码。

13.除bitset以外,-个容器在增加元素时自动增大,删除元素时自动减小。14.顺序容器和关

联容器;

1)顺序容器: 将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素, 这就是顺序容器。顺序容器的元索排列次序与元索值无关,而是由元素添加到容器里的次序决定。

2) 关联容器(Associative containers) 支持通过键来高效地查找和读取元素

关联容器和顺序容器的本质区别在于:关联容器通过键(KEY)存储和读取元素,而顺.序容器则通过元素在容器中的位置存储和方问元素,

3)关联容器和关联容器都提供了成员隔数begin()和end()雨数。15. vector容器1) vector 模版

template> class vector2) vector的构造函数: ➢explicit vector(const Allocator &a=Allocator)

➢explicit vector(size_ type num, const T &val=T(), const Allocator &a=Allocator())vector(const vector&ob)➢例:vector iv; vector cv(5);vector cv(5,X');vector➢begin (:返回一个指向矢量容器始端的迭代器。

end():返回一个指向矢量容器未端的迭代器。push_back0);把一个值放骨在矢量容器的末端。insert ( ):可以在容器中间添加元素。

➢erase ()从矢量容器中删除元素。erase (D); 删除i所指向的元素并返回删除元素 后面的元素的迭代器。 16. list 容器 1) list 模版

template> class list 2) list 的构造函数

explicit list(const Allocator &a=Allocator)

explicit list(size_type num, const T &val=T(), const Allocator &a=Allocator()) list(const vector&ob) 例: list Ist; list Ist1(5); list Ist2(5, 2); list Ist3(Ist);

3) list 的常用成员函数:

push_back()函数可以把元素放入一个列表的末尾。 push_front()函数可以把元素放入列表的前面。 splice()可以把两个列表连接起来。

merge()可以把一个列表合并入另一个列表。 17. map 容器 1) map 模版

template, class Allocator=allocator>class map 2) map的构造函数:

explicit map(const Comp &cmpfn=Comp(), const Allocator &a=Allocator()) map(const map&ob)5

例:map m;

m.insert(pair(A, 5)); 也可以用

m.insert(make_pair('A',9)); 18.算法

1) 算法作用于容器,他们提供操作容器内容的方法,他们做的事包括初始化,排序, 搜索和转换容器内容。

2) 所用算法都是模版函数,可以把算法应用于任何类型的容器。 3) 计数

1) template ptrdiff_t count(Inter start, Inter end,const T &val) cout()算法返回序列中与val 相匹配的元素个数。

2) template ptrdiff_t count(Inter start, Inter end,Unpred pfnl)

count_if()算法返回序列中使一元函数pfn返回true 的元素个数。 例: 1) count

vector v;

count(v.begin(),v.end(),true)//意为在v中v.begin()到 v.end()之间匹配true的个数。 2) count_ _if

bool abc(int i){if(i%3==0)return true; :

count_ ifv.begin(),b.end(),abel;//把 v中的全部元素都传入abc函数中,记录返回true的个数。

4) 删除与替换元素 )删除

template

OutInter remove_ copy(Inter start, Inter end, Outnter result, const T &val)➢remove__copy()算法复制指定范围内的元素并则除值为value的那些元

素,他把结果放入由result指向的序列并返回一个指向结果末端的迭代器.

例: remove. cop(.begin),v.end(),v2.begin(),' )把向量v从开始到末尾复制到以v口的井始,并日删掉v2中的空格。b)替换

template

OutInter replace_ copy(Inter start, Inter end, OutInter result, const T &old,const T &new) ➢replace_ copy()算法是从指定的范围复制元素并用new替换值为old 的元素。

例: replace_ copy(vbegin(), v.end). v2bein)\"?);把向量从开始到未尾都复制给v2,月把v2中的空格用“:”替换。

5) 序列变换

template

Outiter transform(Inlter start1, Inlter end1, Inlter2 start2, Outiter result, Funcbinaryfunc) ➢transform()可以把一个函数应用于某个范围的元素并把结果存储在 result中。

double abd(double i){return 10/1;

list:iterator p=lst.begin(;

p=transform(lst.begin(),lst. end(),Ist.bein(),abd);

1)二元函数对象

divides modulusnot_ equal. _to greater greater_ equal lessless_ equal logical and logical or

2)一元函数对象 logical not negate

)内置函数对象是重载operator0的模版类,它返同对选定数据类型进行指定操作

的结果。

4)内置函数刘象需要用到头文件

5) 对float数据进行一元函数对象plus ()的语法:

plus();

5) transform()算法的使用

transform (Ist.begin(), Ist.end(), Ist.begin(), negate() ; 7) 绑定器

➢绑定器的结构

bind1st(binfunc_ _obj, value)bind2nd(binfunc_ obj, value)

其中binfunc_ _obj 是一个二元函数对象,bind1st()返回个元函数对 象,该函数对象具有绑定到value的binfunc_ _obj 的左操作。bind2nd()返回一个一元函数对象,该函数对象具有绑定到value的bindfunc obj 的右操作数➢remove_ _if

template

ForInter remove_ if(Forlter start, Forlter end,UnPred func);

如果func定义的一元谓词为true, 该算法是从start和end定义的序列中删除一些元素, 然后返回一个指向新的序列末端的指针以反映出元素已被删除。例: litint>:iterator endp;

endp=remove_ if(lst.begin(),lst.end(),bind2nd(greater()8))➢not1()和not20)

not1(unary_ predicate)not2(unary_ predicate)

例: endp=remove_ if(lst.begin(), lst.end(),not1(bind2nd(greatersint>()81))20. string 类

1 一些string成员函数

可以把一一个字符串赋值给另-一个字符串,可以用assign(), 该函数的两种形式:string &assign(const string &strob, size_ type start, size_ type num)string &assign(const char *str,size_ type num)string &assign(const char *str, size_ type num)

第种形式中,函数将strob中从start指定的下标开始计数的num个字符赋给请用对象。

第_种方式中,以null结束的字符串str的前num个字符被赋值给调用对象.➢append 函数,两种形式

string &append (const string &strob, size. type start, size_ .type num)string &append(const char *str, size_ _type num)

第-一种形式,函数将strob中从start 指定的下标开始计数的num个字符添加到调用调用对象。

第二种形式,以null结束的字符str的前num个私服被添加到调用对象。➢insert (和replace ()函数的常用原型

string &insert(size_ type start, const &trob);

string &insert(size_ type start, const string &strob,

size_ type insStart, size_ type num) C++bind1st

string &replace(size_ type start, size_ type num, const string &strob ) string &replace(size_ type start, size_ .type num, const string &strob, size_ type replaceStart, size_ type replaceNum)

第一种形式的insert函数按start指定的下标位置把strob插入到调用字符串中。

第二种形式的insert的数按start指定的下标位置把strob中从insStart开始的num个字符插入到调用字符串中。

第一一种形式的replace 函数用strob 替换调用字符串中从start开始的num个字符。 第二种形式的replace 函数用strob 指定的字符中从replaceStart 开始的replaceNum个宁符替换调用字符串中从start开始的orgNum个字符,返四一个调用对象的引用。

➢erase()可以删除一个字符串中的字符

string &erase(size_ type start=Q,size_ type num=npos);

该函数从start开始删除调用字符串中的num个字符并返回一个调用字符串的引用。 ➢搜索字符串find 0)和rfind (),他们最常用的原型

size_ type find(const string &strob, size_ type start=0)const;

size_ _type rfind(const string &strob, size_ type start=npos const;

find()从start开始搜索调用字符串中第一次的包 含在strob中的字符。如果找到返回调用字符串出现匹配的下标。没找到则返回npos。rfind O)函数式搜索效用字符串中最后出现的strob。compare()函数。

int cormpare(size_ type start, size_ type num, const &string strob)const; 函数将对strob中从start 开始的num个宁符与调用字符串进行比较。如果调用字符串小于strob返回值小于0,大于则返回人于0,等于则返回值为0。21.基于C的输入/输出函数

1)基于c 是输入输出函数都要用到头文件#include

2) void clearer(File *stream)函数重置与stream所指的流相关的错误标记:

3) int fclose(FILE *stream)函数关闭与stream相关的文件并刷新相应的缓冲区.成功返 回0,否则返回EOF。

4) int foef (FILE *stream) 函数用来检查文件位置指示符以确定是否达到与stream相 关的文件的末尾。指示符位于文件尾则返回一个非0值,否则返回0.

5) int ferror (FILE *stream)函数检查给定的stream的文件错误,没有错误返回0,否 则返回非0.

6) int flush(FILE *stream)函数使输入缓冲区的内容被真正写入到该文件。写入成功返 回0,否则返回EOF。

7) int fgetc(FILE *stream)函数从输入流中返回当前位置的下一个字符并且给文件的位 置指示符加1.

8) int fgetpos(FILE *stream, fpos_ _t *position)函数把文件位置指示符指定的当前值存 储在position所指的对象中。position 所指的对象必须是fpos_ t类型。

9) char *gets(char *str, int num, FILE *stream)函数从stream中读取num-1个字符并将这 些字符放入str所指的字符数组。

10) FILE *fopen(const char *filename, const char *mode)丽数打开一个文件并返回与他相 关的流。

11)当访问一个以读写方式打开的文件时,不能在输入(输出)操作之后跟着执行输出

因篇幅问题不能全部显示,请点此查看更多更全内容