《C/C++函数与算法(C++独立篇)》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
YanlzCC++_Algorithm_V01_1.0 |
严立钻 |
|
2020.01.17 |
|
|
|
|
|
|
++++“C/C++函数与算法(C++独立篇)”:是对“C++C铸就生存利器”的综合探索;C/C++作为万能语言,可以开发嵌入式、物联网,也可以开发游戏(Cocos2dx、UE4);
++++“C/C++函数与算法(C++独立篇)”:定位在一个科普类知识,了解C/C++相关库和算法!
#第一篇:C语言函数 |
#第二篇:C++输入/输出 |
++B12、ios_base |
//立钻哥哥:成员函数//ios_base类声明在xiosbase.h文件中ios_base(const ios_base&);virtual ~ios_base();fmtflags flags() const;fmtflags flags(fmtflags fmtfl);fmtflags setf(fmtflags fmtfl);fmtflags setf(fmtflags fmtfl, fmtflags mask);void unsetf(fmtflags mask);streamsize precision() const;streamsize precision(streamsize prec);streamsize width() const;streamsize width(streamsize wide); |
++++B12.1、flags |
++++立钻哥哥:flags函数的主要作用是得到/设置流的格式标志;
fmtflags flags() const;fmtflags flags(fmtflags fmtfl); |
++++类型fmtflags可以用在成员函数flags、setf和unsetf中;
++++fmtflags类型常量都是定义在ios_base类中的公共成员,因此,它们可以直接使用类名引用其成员,如ios_base::hex;也可以使用派生类或实例对象引用各个成员,如ios::left,cout.fixed;
++++B12.2、setf/unsetf |
++++立钻哥哥:setf函数和unsetf函数分别用来设置/清除流的格式标志;
fmtflags setf(fmtflags fmtfl);fmtflags setf(fmtflags fmtfl, fmtflags mask);void unsetf(fmtflags mask); |
++++setf(fmtflags fmtfl)函数的作用相当于调用函数flags(fmtfl|flags()) ,setf(fmtflags, fmtflags mask)函数的作用相当于调用flags((fmtfl&mask)|(flags() & ~mask)),unsetf(fmtflags mask)类型fmtflags可以用在成员函数flags、setf和unsetf中;
++++B12.3、precision |
++++立钻哥哥:precision函数可以得到或设置浮点数的精度;
streamsize precision() const;streamsize precision(streamsize prec); |
++++在默认情况下,精度表示输出小数点前后的数字最大个数;在定点和科学计数法的情况下,精度表示输出小数点后的数字个数;
++++B12.4、width |
++++立钻哥哥:width函数用来得到/设置域宽;
streamsize width() const;streamsize width(streamsize wide); |
++B13、iostream |
++++B13.1、get |
++++立钻哥哥:get函数的主要作用是执行无格式的输入操作;
int get();istream& get(char& c);istream& get(char* s, streamsize n);istream& get(char* s, streamsize n, char delim);istream& get(streambuf& sb);istream& get(streambuf& sb, char delim); |
++++get函数是派生自istream流的成员函数,用来执行流的输入操作(标准输入、读取文件);
++++为了通过streambuf执行输入操作,需要利用rdbuf函数返回指向streambuf对象的指针;这样就可以通过流对象与rdbuf函数输出流中的内容了;
++++B13.2、getline |
++++立钻哥哥:getline函数从输入流中析取字符串并存放到字符数组中;
istream& getline(char* s, streamsize n);istream& getline(char* s, streamsize n, char delim); |
++++当输入限定符(‘\n’或delim)或输入的字符个数为n-1时,停止从输入流中接受字符;
++++getline函数是从istream类中派生的函数;
++++B13.3、ignore |
++++立钻哥哥:ignore函数的作用是忽略指定的字符delim前面的字符,n表示接受并丢弃的字符个数;
istream& ignore(streamsize n=1, int delim=EOF); |
++++当接受了n个字符并丢弃或指定的delim字符出现后,ignore函数停止接受字符;
++++B13.4、peek |
++++立钻哥哥:peek是未格式化输入函数,它的作用是检查输入的字符并将其提供给输入流;
int peek(); |
++++peek函数与get函数都可以用来接收流中的字符,不同的是:peek函数还将流中的字符提供给下一个输入流,get函数只是接受流中的字符;
++++peek函数派生自istream流的函数;
++++B13.5、read |
++++立钻哥哥:read函数从流中读取n个字符并存放到字符数组s中;
istream& read(char* s, streamsize n); |
++++read函数用来接受输入的字符块,它属于非格式输入函数,字符存放到字符数组s中后,并不会自动添加’\0’结束标志;因此,为了正确输出字符,需要手工添加’\0’;
++++read函数派生自istream流;
++++B13.6、putback |
++++立钻哥哥:putback函数将前面用get函数或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针的位置,供后面读取;
istream& putback(char ch); |
++++putback函数派生自istream流;
++++B13.7、put |
++++立钻哥哥:put函数将字符ch输出到输出流缓冲区流指针指向的位置,并使流指针指向下一个位置以便接受下一个字符;
ostream& put(char ch); |
++++put函数派生自ostream流;
++++get函数与put函数类似于C语言中的fgetc函数与fputc函数,不仅可以用来作为标准输入与输出,还可以对文件进行读/写;
++++B13.8、fill |
++++立钻哥哥:fill函数用来得到/设置填充字符;
char fill() const;char fill(char fillch); |
++++fill函数派生自ios流;
++B14、文件流 |
++B14.1、ifstream |
++++立钻哥哥:ifstream类的构造函数用来创建输入流的对象;
ifstream();ifstream(const char *filename, ios_base::openmode mode=ios_base::in); |
++++带参数的ifstream构造函数使流对象直接与物理文件相关联,在以后的使用过程中可以直接利用流对象对该文件进行操作;
++++B14.2、rdbuf |
++++立钻哥哥:rdbuf函数返回指向filebuf的指针;
filebuf *rdbuf() const; |
++++filebuf类是由streambuf类派生出的;streambuf类负责对字符序列进行读/写,streambuf对象通常与特定的字符序列相关联,通过streambuf对象可以将数据读/写入内存缓冲区,这个内存缓冲区可以与字符序列相关联;由于filebuf类派生自streambuf类,因此具有了对字符序列读/写的功能,它主要负责对文件进行读/写操作;
++++注意:对于ifstream流对象来说,即使没有文件被打开,与流相关的filebuf指针也不是空指针;
++++B14.3、is_open |
++++立钻哥哥:is_open函数的作用是检测与流相关的文件是否被打开;
bool is_open(); |
++++B14.4、open/close |
++++立钻哥哥:open函数的作用是打开文件filename,使文件与流对象相关联并对该文件执行输入/输出操作;具体操作的类型取决于参数mode,在默认情况下(省略第2个参数),在流上执行输入操作;close函数关闭与流对象相关的文件,使文件与流对象不相关;这两个函数是ifstream类中的成员函数;
void open(const char *filename, ios_base::openmode mode=ios_base:in);void close(); |
++++open(file, mode)函数实际上调用了rdbuf()->open(file, mode);;如果流对象已经与文件相关,则调用open函数失败;
++++ifstream类、ofstream类和fstream类都有open成员函数和close成员函数;其中,它们的close成员函数原型相同;
++++B14.5、read/write |
++++立钻哥哥:ifstream类的成员函数read和ostream类的成员函数write分别派生自istream类和ostream类;read函数从流中读取n个字符并存放到字符数组s中;write函数将长度为n的字符串s写入到输出流中;
istream& read(char *s, streamsize n);ostream& write(const char *s, streamsize n); |
++++ifsteam类中的read函数用来从文件中读取数据,ofstream类中的write函数用来向文件中写入数据;
++++B14.6、seekg/tellg |
++++立钻哥哥:在ifstream类中,seekg函数和tellg函数分别用来设置/得到流的位置指针的位置;seekg函数用来设置流的位置指针的位置;其中,pos表示位置指针的位置,off表示基于dir的相对位移量;
istream& seekg(streampos pos);istream& seekg(streamoff off, ios_base::seekdir dir);streampos tellg(); |
++++tellg函数返回输入流中从开始位置到当前位置指针所在位置之间的字符个数;
++++seekg函数和tellg函数派生自istream类;
++++B14.7、seekp/tellp |
++++立钻哥哥:在文件输出流中,seekp函数和tell函数分别用来设置文件位置指针的位置和得到文件位置指针的位置;seekp函数在文件输出流中设置位置指针的位置,参数pos、off和dir的含义与seekg函数相同;tellp函数获得文件输出流中的位置指针位置;
ostream& seekp(streampos pos);ostream& seekp(streamoff off, ios_base::seekdir dir);streampos tellp(); |
++++seekp函数与tellp函数派生自ostream类,它们都是ofstream类和fstream类的成员函数;
++++B14.8、flush |
++++立钻哥哥:flush函数用来刷新输出流缓冲区;flush函数使输出流与相关联的缓冲区保持同步,实际上是将缓冲区的字符写入输出流中;
ostream& flush(); |
++++flush函数的作用类似于endl控制符,都是将缓冲区的字符输出到流中;另外,endl控制符还有回车换行的作用;
++B15、string |
++B15.1、字符串运算符函数 |
++++B15.1.1、字符串构造函数 |
++++立钻哥哥:在C++中,字符串构造函数有7个:第1个构造函数创建一个空的字符串对象;第2个构造函数创建一个str副本;第3个函数创建str中从pos开始长度为npos的子对象;第4个函数创建str中前n个字符的子序列;第5个函数创建一个字符串对象,其值为s指向的字符串;第6个函数创建一个长度为n字符为c的子序列;第7个函数创建一个由start和end迭代器指定的字符集的字符串对象;
string();string(const string& str);string(const string& str, size_t pos, size_t n=npos);string(const char *s, size_t n);string(const char *s);string(size_t n, char c);template<class InputIterator> string(InputIterator begin, InputIterator end); |
++++string类的构造函数有多个,在创建string对象时,可以有多种形式,例如,可以利用string对象创建对象,也可以利用字符串创建string对象;
++++B15.1.2、=运算符函数 |
++++立钻哥哥:在C++语言中,赋值运算符=函数的作用是将右端的字符串值赋值给左端的字符串对象;
string& operator=(const string& str);string& operator=(cosnt char *s);string& operator=(char c); |
++++string类的=运算符的作用与成员函数assign的作用类似,都是将右端的字符或字符串赋值给左端的string类对象;
++++在C++中定义函数时,通过在运算符前使用关键字operator来表示运算符重载函数;赋值运算符函数operator=是C++中string类的成员函数;
++++B15.1.3、+和+=运算符函数 |
++++立钻哥哥:+运算符函数的主要作用是将rhs连接在lhs之后,使其构成新的字符串对象;+=运算符函数的主要作用是在C++语言中,赋值运算符(=)的作用是将右端的字符串值赋值给左端的字符串对象;
string operator+(const string& lhs, const string& rhs);string operator+(const char *lhs, const string& rhs);string operator+(char lhs, const string& rhs);string operator+(const string& lhs, const char *rhs);string operator+(const string& lhs, char rhs);string& operator+=(const string& str);string& operator+=(const char *s);string& operator+=(char c); |
++++说明:+运算符函数和+=运算符函数都是运算符重载函数,+运算符函数返回字符串对象,+=运算符函数返回字符串对象的引用;这两种运算符函数类似于简单运算符+和复合运算符+=的操作;
++++B15.1.4、==、!=、<、>、<=、>=运算符函数 |
++++立钻哥哥:==、!=、<、>、<=、>=运算符函数的主要作用分别是判断一个字符串对象是否相等、不相等、小于、大于、小于等于、大于等于另一个字符串对象;
bool operator==(const string& c1, const string& c2);bool operator!=(const string& c1, const string& c2);bool operator<(const string& c1, const string& c2);bool operator>(const string& c1, const string& c2);bool operator<=(const string& c1, const string& c2);bool operator>=(const string& c1, const string& c2); |
++++在C++中,string类提供了两个字符串之间的比较运算符重载的实现,这对于字符串的操作是非常方便的;在C++中的其他类(对象)操作中,如果要比较两个对象的关系,就需要用户对运算符进行重载;
++++B15.1.5、[]运算符函数 |
++++立钻哥哥:[]运算符函数的主要作用是返回string对象中下标为pos的字符;
const char& operator[](size_t pos)const;char& operator[](size_t pos); |
++++在利用[]运算符函数存取string中的字符时,第一个字符的下标是从0开始的,而不是从1开始;
++++B15.1.6、at函数 |
++++立钻哥哥:at函数与[]运算符函数的作用类似,也是返回string对象中下标为pos的字符;
const char& at(size_t pos)const;char& at(size_t pos); |
++++如果at函数中的参数取值超出了string范围,则会抛出一个越界异常;
++B15.2、字符串迭代器 |
++++B15.2.1、begin/end |
++++立钻哥哥:begin函数返回与string中第一个字符相关的迭代器;end函数返回与string中最后一个字符相关的迭代器;
iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; |
++++在string中,begin函数和end函数分别都有两个版本;一种是非const string迭代的iterator,另一种是const string迭代的iterator;其中,const_string迭代器并不能修改所迭代的容器string;
++++B15.2.2、rbegin/rend |
++++立钻哥哥:rbegin函数返回与string中最后一个字符相关的迭代器,它是反向的开始位置;rend函数返回与string中第一个字符之前字符相关的迭代器,它可以看做是反向的end函数;
reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; |
++++与begin函数和end函数一样,rbegin函数和rend函数也分别由两个版本:一种是非const string迭代的iterator,另一种是const string迭代的iterator;
++++rbegin迭代器与end迭代器指向的前一个字符相等,rend迭代器与begin迭代器指向的前一个字符相等;
++B15.3、字符串长度 |
++++B15.3.1、length/size |
++++立钻哥哥:length函数与size函数的作用等价,都是返回string中字符的个数;
size_t length() const;size_t size() const; |
++++B15.3.2、max_size |
++++立钻哥哥:max_size函数返回string对象能容纳的最大字符个数;
size_t max_size() const; |
++++B15.3.3、capacity |
++++立钻哥哥:capacity函数返回分配给string对象存储空间大小;
size_t capacity() const; |
++++对于string来说,系统分配的存储空间不一定刚好等于字符串长度,它可能大于或等于字符串的长度;
++++B15.3.4、resize |
++++立钻哥哥:resize函数的作用是重新设置string的长度为n;
void resize(size_t n, char c);void resize(size_t n); |
++++如果n小于当前string的长度,则后续的字符将被抛弃;如果n大于当前string的长度,字符c的实例将被添加到末尾直到字符个数达到n;
++++B15.3.5、reserve |
++++立钻哥哥:reserve函数的作用是请求为string对象预留大小为res_arg的内存空间;
void reserve(size_t res_arg=0); |
++++reserve函数可能会增加或减少string对象的内存空间;
++++B15.3.6、empty |
++++立钻哥哥:empty函数的作用是判断string是否为空,即string的大小是否为0;
bool empty(); |
++++[函数的返回值]:如果string的大小为0,则返回true;否则,返回false;
++++empty函数并不能以任何方式修改string中的内容;
++B15.4、字符串操作 |
++++B15.4.1、insert |
++++立钻哥哥:insert函数是在一个字符串中插入另一个字符串;
string& insert(size_t pos1, const string& str);string& insert(size_t pos1, const string& str, size_t pos2, size_t n);string& insert(size_t pos1, const char *s, size_t n);string& insert(size_t pos1, const char *s);string& insert(size_t pos1, size_t n, char c);iterator insert(iterator p, char c);void insert(iterator p, size_t n, char c);template<class InputIterator> void insert(iterator p, InputIterator first, InputIterator last); |
++++注意:如果插入的是c类型的完整字符串,则字符串对象以’\0’结束;插入字符串或字符时,第1个字符以0开始,而不是以1开始;如果要插入的位置超过了当前字符串的范围,则抛出一个异常;
++++B15.4.2、erase |
++B15.4.2、erase
++++立钻哥哥:erase函数的作用是清除string中的字符,并缩短string的长度;
string& erase(size_t pos=0, size_t n=npos);iterator erase(iterator position);iterator erase(iterator first, iterator list); |
++++说明:对于第2个erase函数来说,仅仅清除string中的一个字符;
++++B15.4.3、replace |
++++立钻哥哥:replace函数的作用是用参数中的字符或字符串取代当前字符串对象中的字符序列;
string& replace(size_t pos1, size_t n1, const string& str);string& replace(iterator i1, iterator i2, const string& str);string& replace(size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2);string& replace(size_t pos1, size_t n1, const char *s, size_t n2);string& replace(iterator i1, iterator i2, const char *s, size_t n2);string& replace(size_t pos1, size_t n1, const char *s);string& replace(iterator i1, iterator i2, const char *s);string& replace(size_t pos1, size_t n1, size_t n2, char c);string& replace(iterator i1, iterator i2, size_t n2, char c);template<class InputIterator> string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2); |
++++在replace函数中,字符串中的下标是从0开始的,而不是从1开始;如果n1大于当前字符串的实际长度,则从pos1开始的整个字符串将被替换;如果n2小于实际的字符串长度,则最后一个字符之前的字符用来替换当前字符串;
++++B15.4.4、swap |
++++立钻哥哥:swap函数的作用是将当前string对象与str对象中的内容交换;交换后,当前字符串的内容是str中的内容,str中的内容是当前字符串的内容;
void swap(string& str); |
++++B15.4.5、c_str |
++++立钻哥哥:c_str函数的作用是利用string对象中的内容生成C字符串并返回指向该字符串的指针;
const char *c_str() const; |
++++调用c_str函数后,转换后的C字符串末尾自动被增加一个’\0’的结束符;
++++B15.4.6、copy |
++++立钻哥哥:copy函数的作用是从string对象中取出若干个字符存放到数组s中;其中,s是字符数组,n表示要取出字符的个数,pos表示要取出字符的开始位置;
size_t copy(char *s, size_t n, size_t pos=0) const; |
++++在调用copy函数时,应先为s分配内存空间使其能容纳n个字符;如果n大于pos到string末尾字符的个数,则仅取出从pos到string末尾的字符;
++++B15.4.7、find |
++++立钻哥哥:find函数的作用是在当前string对象中查找指定的字符c或字符串s或字符串对象str;
size_t find(const string& str, size_t pos=0) const;size_t find(const char *s, size_t pos, size_t n) const;size_t find(const char *s, size_t pos=0) const;size_t find(char c, size_t pos=0) const; |
++++B15.4.8、find_first_of/find_last_of |
++++立钻哥哥:find_first_of函数和find_last_of函数的作用都是在当前string中查找与str、s、c部分匹配的字符;二者的区别在于:find_first_of函数是从前往后查找,find_last_of函数是从后往前查找;
size_t find_first_of(const string& str, size_t pos=0) const;size_t find_first_of(const char *s, size_t pos, size_t n) const;size_t find_first_of(const char *s, size_t pos=0) const;size_t find_first_of(char c, size_t pos=0) const;size_t find_last_of(const string& str, size_t pos=npos) const;size_t find_last_of(const char *s, size_t pos, size_t n) const;size_t find_last_of(const char *s, size_t pos=npos) const;size_t find_last_of(char c, size_t pos=npos) const; |
++++find_first_of函数与find函数的区别在于:对于find_first_of函数,指定字符串中某个字符与当前string对象中字符相等,则返回该字符在string中的位置;find函数则要求两个字符串完全匹配,而不仅仅要求某个字符相等;
++++B15.4.9、substr |
++++立钻哥哥:substr函数的作用是由当前string对象生成子串并返回;
string substr(size_t pos=0, size_t n=npos) const; |
++++在默认情况下,substr函数返回包含string对象中所有字符的字符串;如果pos超过了string的范围,则出现越界错误;如果n超出了string的最大范围,则将pos之后的所有字符作为子串返回;
#第三篇:标准容器 |
++C16、vector类 |
++C16.1、构造类函数 |
++++C16.1.1、vector的构造函数和析构函数 |
++++立钻哥哥:在C++中,字符串构造函数有4个;其中,第1个构造函数是默认的构造函数,它的作用是创建一个空的vector对象;第2个是重复序列构造函数,创建多个相同的vector对象副本;第3个函数是迭代构造函数,利用迭代器创建vector对象;第4个函数是拷贝构造函数,创建一个与x相同的vector对象;
vector(const Allocator& =Allocator());vector(size_type n, const T& value=T(), const Allocator& =Allocator());template<class InputIterator> vector(InputIterator first, InputIterator last, const Allocator& =Allocator());vector(const vector<T, Allocator>& x);~vector(); |
++++在使用迭代器构造vector对象时,当前vector容器的内容是[first, last]之间的元素;注意:包括first指向的元素,而不包括last指向的元素;
++++析构函数~vector()在程序结束时由系统自动调用;
++++C16.1.2、operator=函数 |
++++立钻哥哥:operator=函数的作用是将vector对象x中的内容复制到当前的vector对象中;
vector |
++C16.2、迭代器函数 |
++++C16.2.1、begin/end |
++++立钻哥哥:begin函数的作用是返回vector容器中的第一个元素位置;end函数的作用是返回vector容器中的最后一个元素的后一个位置;
iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; |
++++C16.2.2、rbegin/rend |
++++立钻哥哥:rbegin函数的作用是返回与vector中最后一个元素相关的迭代器;rend函数的作用是返回与vector中第一个字符之间元素相关的迭代器;
reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; |
++++rbegin函数和rend函数与begin函数和end函数的作用一样,区别仅在于它们的迭代方向不同:一个是从左到右进行迭代,一个是从右往左进行迭代;
++C16.3、容量类函数 |
++++C16.3.1、size/max_size/capacity |
++++立钻哥哥:size函数的作用是返回vector容器中元素的个数;max_size函数的作用是返回vector容器能容纳的最大元素个数;capacity函数的作用是返回为vector容器分配的存储空间大小;
size_type size() const;size_type max_size() const;size_type capacity() const; |
++++C16.3.2、empty |
++++立钻哥哥:empty函数的作用是判断vector容器是否为空,即vector容器的元素个数是否为0;
bool empty() const; |
++++empty函数并不会修改vector容器中的元素,如果要清除vector容器中的元素,需要调用clear函数;
++++C16.3.3、resize |
++++立钻哥哥:resize函数的作用是重新调整vector容器的大小使之包含sz个元素;
void resize(size_type sz, T c=T()); |
++++如果sz小于原来vector容器的大小,则保留容器前面的元素值,后面的元素被抛弃;如果sz大于原来vector的大小,则在容器的末尾插入元素c,使容器的大小到达sz个;这里所说的vector容器的大小指的是元素的实际个数,而不是vector容器的存储空间大小;size_type是一个无符号整型;
++++C16.3.4、reserve |
++++立钻哥哥:reserve函数的作用是重新为vector容器分配内存空间使其至少能容纳n个元素;
void reserve(size_type n); |
++++reserve函数中的参数n表示为vector容器分配的最少内存空间大小;调用reserve函数后,原来vector容器中的元素不会受到影响,并且不会改变容器中的实际元素个数和容器所能容纳的最大元素个数;
++C16.4、存取类函数 |
++++C16.4.1、operator[] |
++++立钻哥哥:operator[]函数是运算符重载函数,它的作用是存取vector容器中的元素;
reference operator[](size_type n);const_reference operator[](size_type n) const; |
++++类型reference和const_reference都是vector容器中元素的引用类型,通常分别被定义为T&和const T&;
++++operator[]函数的作用类似于函数at,它们都用来存取vector容器中的元素,区别仅在于at函数自动进行越界检查;
++++C16.4.2、at |
++++立钻哥哥:at函数的作用与operator[]函数一样,也是用来存取vector容器中的元素;
const_reference at(size_type n) const;reference at(size_type n); |
++++如果参数n大于或等于vector容器的实际大小,则抛出一个越界异常;
++++C16.4.3、front/back |
++++立钻哥哥:front函数的作用是返回vector容器中的第一个元素;back函数的作用是返回vector容器中的最后一个元素;
reference front();const_reference front() const;reference back();const_reference back() const; |
++++begin函数和end函数分别返回vector容器中元素的迭代器,而front函数和back函数则直接返回元素;
++C16.5、操作类函数 |
++++C16.5.1、assign |
++++立钻哥哥:assign函数的作用是利用迭代器或指定的值为当前的vector容器中的元素赋值;
void assign(InputIterator first, InputIterator last);void assign(size_type n, const T& u); |
++++在利用迭代器first和last为当前的vector容器赋值时,要赋值的元素范围是[first, last),即包括first指向的元素而不包括last指向的元素;
++++C16.5.2、push_back |
++++立钻哥哥:push_back函数的作用是在vector容器的最后一个元素之后添加元素x;
void push_back(const T& x); |
++++当调用push_back函数后,vector容器的实际元素个数增1;当实际元素个数等于vector容器的存储空间大小时,系统自动为该容器分配内存空间;
++++C16.5.3、pop_back |
++++立钻哥哥:pop_back函数的作用是删除vector容器中的最后一个元素;
void pop_back(); |
++++C16.5.4、insert |
++++立钻哥哥:insert函数的作用是在vector容器中插入元素;
iterator insert(iterator position, const T& x);void insert(iterator position, size_type n, const T& x);void insert(iterator position, InputIterator first, InputIterator last); |
++++第3个函数不仅可以接受vector容器的迭代器作为参数,数组的指针也可以作为参数;
++++对于第3个函数来说,输入对象的[first, last)之间的元素都将插入到vector容器中,包括first指向的元素,但不包括last指向的元素;
++++C16.5.5、erase |
++++立钻哥哥:erase函数的作用是删除vector容器中的指定元素;
iterator erase(iterator position);iterator erase(iterator first, iterator last); |
++++erase函数返回删除指定元素后一个位置;
++++C16.5.6、clear |
++++立钻哥哥:clear函数的作用是清除vector容器中的所有元素;
void clear(); |
++++调用clear函数后,当前vector容器中的元素个数为0;
++++C16.5.7、swap |
++++立钻哥哥:swap函数的作用是将当前vector容器中的内容与vec容器中的内容互换;
void swap(vector<T, Allocator>& vec); |
++++调用swap函数后,当前vector容器中的元素成为vec容器中的元素,vec容器中的元素成为当前vector容器中的元素;
++++要交换的两个vector容器的大小不一定相同;
++C17、deque类 |
++C17.1、构造类函数 |
++++C17.1.1、deque的构造函数和析构函数 |
++++立钻哥哥:deque构造函数的作用是创造deque容器并初始化容器中的元素;
deque(const Allocator& =Allocator());deque(size_type n, const T& value=T(), const Allocator& =Allocator());deque(InputIterator first, InputIterator last, const Allocator& =Allocator());deque(const deque<T, Allocator>& x);~deque(); |
++++在使用迭代器first和last构造deque对象时,当前deque容器中包含first指向的元素,而不包括last指向的元素;
++++析构函数~deque()在程序结束时由系统自动调用;
++++C17.1.2、operator=函数 |
++++立钻哥哥:operator=函数的作用是将deque对象x中的内容复制到当前的deque对象中;
deque<T, Allocator>& operator=(const deque<T, Allocator>& x); |
++++当调用operator=函数后,当前deque容器中的内容被x中的内容替换掉,x容器与当前的容器大小相同;
++C17.2、迭代器函数 |
++++C17.2.1、begin/end |
++++立钻哥哥:begin函数的作用是返回deque容器中的第一个元素位置;end函数的作用是返回deque容器中的最后一个元素的后一个位置;
iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; |
++++迭代器begin指向deque容器中的第一个元素,迭代器end指向deque容器中的最后一个元素之后的位置,而不是指向最后一个元素;
++++注意将begin函数与front函数、end函数与back函数区别开来;begin函数返回第1个元素的位置,front函数返回第1个元素;end函数返回最后一个元素之后一个的位置,back函数返回最后一个元素之后的元素;
++++C17.2.2、rbegin/rend |
++++立钻哥哥:rbegin函数的作用是返回与deque中最后一个元素相关的迭代器;rend函数的作用是返回与deque中第一个元素之前的元素相关的迭代器;
reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; |
++++rbegin函数与begin函数、rend函数与end函数都指向迭代的元素,区别仅在于它们的迭代方向不同:begin函数与end函数从左到右进行迭代,rbegin函数与rend函数从右往左进行迭代;
++C17.3、容量类函数 |
++++C17.3.1、size/max_size |
++++立钻哥哥:size函数的作用是返回deque容器中元素的个数;max_size函数的作用是返回deque容器能容纳的最大元素个数;
size_type size() const;size_type max_size() const; |
++++C17.3.2、empty |
++++立钻哥哥:empty函数的作用是判断deque容器是否为空,即deque容器的元素个数是否为0;
bool empty() const; |
++++与vector容器中的empty函数一样,deque中的empty函数也不会修改容器中的元素;
++++C17.3.3、resize |
++++立钻哥哥:resize函数的作用是重新调整deque容器的大小使其包含sz个元素;
void resize(size_type sz, T c=T()); |
++++如果sz小于原来deque容器的大小,则第sz之后的元素被抛弃,前面的元素仍被保留;如果sz大于原来deque的大小,则容器的大小扩展到sz个元素,并在末尾追加元素c;如果省略了参数c,则插入的元素值为0;
++C17.4、存取类函数 |
++++C17.4.1、operator[] |
++++立钻哥哥:operator[]函数是运算符重载函数,它的作用是存取deque容器中的元素;
reference operator[](size_type n);const_reference operator[](size_type n) const; |
++++类型reference和const_reference都是deque容器中元素的引用类型,通常分别被定义为T&和const T&;
++++operator[]函数与at函数的作用类似,它们都用来存取deque容器中的元素,区别仅在于at函数会自动进行越界检查;
++++C17.4.2、at |
++++立钻哥哥:at函数的作用与operator[]函数一样,也是用来存取deque容器中的元素;
const_reference at(size_type n) const;reference at(size_type n); |
++++在引用deque容器中的元素时,如果参数n大于或等于deque容器的实际大小,则抛出一个越界异常;第1个元素的下标从0开始,而不是从1开始;
++++C17.4.3、front/back |
++++立钻哥哥:front函数的作用是返回deque容器中的第一个元素;back函数的作用是返回deque容器中的最后一个元素;
reference front();const_reference front() const;reference back();const_reference back() const; |
++++begin函数和end函数分别返回deque容器中元素的迭代器,而front函数和back函数则直接返回容器中的元素;
++C17.5、操作类函数 |
++++C17.5.1、assign |
++++立钻哥哥:assign函数的作用是将元素赋值给当前的deque容器,之前存放在deque容器中的内容被覆盖掉;
void assign(InputIterator first, InputIterator last);void assign(size_type n, const T& u); |
++++在利用迭代器first和last为deque容器赋值时,赋值的元素范围是[first, last),即包括first指向的元素而不包括last指向的元素;
++++C17.5.2、push_ back |
++++立钻哥哥:push_back函数的作用是在deque容器的最后一个元素之后添加元素x;
void push_back(const T& x); |
++++调用push_back函数后,deque容器的实际元素个数增1,并将新元素追加在容器的最后,但并不会影响到deque中的其他元素;
++++C17.5.3、push_front |
++++立钻哥哥:push_front函数的作用是在deque容器中的第1个元素前插入新元素x;
void push_front(const T& x); |
++++与push_back一样,调用push_front函数也会使deque容器的实际大小自动增1,并在最前面增加一个元素值x;
++++C17.5.4、pop_back |
++++立钻哥哥:pop_back函数的作用是移除deque容器中的最后一个元素;
void pop_back(); |
++++调用pop_back函数之后,deque容器的实际大小自动减1;
++++C17.5.5、pop_front |
++++立钻哥哥:pop_front函数的作用是移除deque容器中的第一个元素;
void pop_front(); |
++++调用pop_front函数之后,deque容器的实际大小自动减1;
++++C17.5.6、insert |
++++立钻哥哥:insert函数的作用是在deque容器中的指定位置插入元素x;
iterator insert(iterator position, const T& x);void insert(iterator position, size_type n, const T& x);void insert(iterator position, InputIterator first, InputIterator last); |
++++双端队列deque的insert函数可以在deque容器的最前面和最后面插入元素,也可以在deque容器的任意位置插入元素;
++++C17.5.7、erase |
++++立钻哥哥:erase函数的作用是删除deque容器中的指定元素;
iterator erase(iterator position);iterator erase(iterator first, iterator last); |
++++erase函数不仅可以删除deque容器中最前面的元素和最后面的元素,还可以删除其他位置的元素,但是在删除其他位置的元素时的执行效率不如list容器;
++++C17.5.8、clear |
++++立钻哥哥:clear函数的作用是清除deque容器中的所有元素;
void clear(); |
++++调用clear函数后,当前deque容器中的元素个数为0;
++++C17.5.9、swap |
++++立钻哥哥:swap函数的作用是将当前deque容器中的内容与dqe容器中的内容互换;
void swap(deque& dqe); |
++++调用swap函数后,两个deque容器中的内容互相对换;两个deque容器的大小不一定相同;
++C18、list类 |
++C18.1、构造类函数 |
++++C18.1.1、list的构造函数和析构函数 |
++++立钻哥哥:list构造函数的作用是创建list容器并初始化容器中的元素;list析构函数的作用是撤销list容器的对象,并释放元素所占的存储区;
list(const Allocator& =Allocator());list(size_type n, const T& value=T(), const Allocator& =Allocator());list(InputIterator first, InputIterator last, const Allocator& =Allocator());list(const list<T, Allocator>& x);~list(); |
++++在使用迭代器first和last构造list对象时,当前list容器中包含first指向的元素,而不包括last指向的元素;另外,构造list对象时,不能对迭代器first和last进行加减运算;
++++析构函数~list()在程序结束时由系统自动调用;
++++C18.1.2、operator=函数 |
++++立钻哥哥:operator=函数的作用是将list对象x中的内容复制到当前的list对象中;
list<T, Allocator>& operator=(const list<T, Allocator>& x); |
++++当调用operator=函数后,当前list容器中的内容被x中的内容替换掉且两个list容器的大小相等;
++C18.2、迭代类函数 |
++++C18.2.1、begin/end |
++++立钻哥哥:begin函数返回list容器中的第一个元素位置;end函数返回list容器中的最后一个元素的后一个位置;
iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; |
++++迭代器begin指向list容器中的第一个元素,迭代器end指向list容器中的最后一个元素后一个元素的位置,并不是指向最后一个元素;
++++与vector容器一样,list容器也可以将数组指针(指针)作为参数;
++++C18.2.2、rbegin/rend |
++++立钻哥哥:rbegin函数返回与list中最后一个元素相关的反向迭代器;rend函数返回与list中第一个元素的前一个位置相关的反向迭代器;
reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; |
++++利用rbegin函数与rend函数输出list容器中的元素时,需要使用反向迭代器控制元素的输出,即将迭代器定义:list
++C18.3、容量类函数 |
++++C18.3.1、size/max_size |
++++立钻哥哥:size函数返回list容器中元素的个数;max_size函数返回list容器能容纳的最大元素个数;
size_type size() const;size_type max_size() const; |
++++与vector容器一样,list容器中的size函数返回实际元素个数,max_size函数返回容器所能容纳的最大元素个数;
++++C18.3.2、empty |
++++立钻哥哥:empty函数的作用是判断list容器是否为空,即list容器中的元素个数是否为0;
bool empty() const; |
++++与vector容器中的empty函数一样,list中的empty函数只是判断容器是否为空,并不会修改容器中的元素;
++++C18.3.3、resize |
++++立钻哥哥:resize函数的作用是调整list容器的大小使其包含sz个元素;
void resize(size_type sz, T c=T()); |
++++如果sz小于原来list容器的大小,则只保留前面的sz个元素,后面的元素被抛弃;如果sz大于原来list的大小,则容器的大小扩展到sz个元素,并将元素c追加在list末尾;如果省略了参数c,则将0追加在list末尾;
++++在这里,所改变容器大小指的是list容器中的实际元素个数,而不是list容量的存储空间大小;
++C18.4、存取类函数 |
++++C18.4.1、front |
++++立钻哥哥:front函数的作用是返回list容器中的第一个元素;
reference front();const_reference front() const; |
++++begin函数返回list容量第一个元素的迭代器,而front函数则直接返回容器中的第一个元素;
++++C18.4.2、back |
++++立钻哥哥:back函数的作用是返回list容器中的最后一个元素;
reference back();const_reference back() const; |
++++end函数返回list容器中最后一个元素的迭代器,而back函数则直接返回容器中的最后一个元素;
++C18.5、操作类函数 |
++++C18.5.1、assign |
++++立钻哥哥:assign函数的作用是将元素赋值给当前的list容器,
void assign(InputIterator first, InputIterator last);void assign(size_type n, const T& u); |
++++在利用迭代器first和last为list容器赋值时,赋值的元素范围是[first, last),即包含first指向的元素而不包含last指向的元素;
++++C18.5.2、push_back |
++++立钻哥哥:push_back函数的作用是在list容器末尾添加元素x;
void push_back(const T& x); |
++++每调用一次push_back函数后,list容器的实际元素个数增1,并将新元素追加在容器的最后;
++++C18.5.3、push_front |
++++立钻哥哥:push_front函数的作用是将元素x插入到list容器中的第1个元素前;
void push_front(const T& x); |
++++与push_back函数一样,调用push_front函数也会使list容器的实际大小自动增1,并将元素x插入到list的第一个位置;
++++C18.5.4、pop_back |
++++立钻哥哥:pop_back函数的作用是移除list容器中的最后一个元素;
void pop_back(); |
++++调用pop_back函数之后,list容器的实际大小自动减1;
++++C18.5.5、pop_front |
++++立钻哥哥:pop_front函数的作用是移除list容器中的第一个元素;
void pop_front(); |
++++调用pop_front函数之后,list容器的实际大小自动减1;
++++C18.5.6、insert |
++++立钻哥哥:insert函数的作用是在list容器中的指定位置插入元素x;
iterator insert(iterator position, const T& x);void insert(iterator position, size_type n, const T& x);void insert(iterator position, InputIterator first, InputIterator last); |
++++list容器是一种双向链表,可以在任意位置插入和删除元素;在顺序容器中,list中的插入和删除操作的效率是最高的;
++++C18.5.7、erase |
++++立钻哥哥:erase函数的作用是删除list容器中的指定元素;
iterator erase(iterator position);iterator erase(iterator first, iterator last); |
++++C18.5.8、clear |
++++立钻哥哥:clear函数的作用是清除list容器中的所有元素;
void clear(); |
++++调用clear函数后,当前list容器的实际大小为0;
++++C18.5.9、swap |
++++立钻哥哥:swap函数的作用是将当前list容器与lst容器中的元素互换;
void swap(list<T, Allocator>& lst); |
++++要交换的两个list容器的大小不一定相同;
++++C18.5.10、splice |
++++立钻哥哥:splice函数的作用是将x中的元素移动到当前list容器的第position位置上,并将x中的元素删除;
void splice(iterator position, list<T, Allocator>& x);void splice(iterator position, list<T, Allocator>& x, iterator i);void splice(iterator position, list<T, Allocator>& x, iterator first, iterator last); |
++++将x容器中的元素移动到当前的list容器后,x容器中该元素被删除;参数x也可以是当前的容器对象;
++++C18.5.11、remove |
++++立钻哥哥:remove函数的作用是将当前list容器中值为value的元素移除;
void remove(const T& value); |
++++erase函数移除list中指定位置的元素,remove函数移除list中指定值的元素;
++++C18.5.12、remove_if |
++++立钻哥哥:remove_if函数的作用是将值不等于pr(*P)的元素从list容器中删除;其中,P表示迭代器;
void remove_if(binder2nd<not_equal_to<T>> pr); |
++++binder2nd是C++的一个模板类;模板类binder2nd对象Pr必须是有一对函数对象op和y构成,其中,成员函数operator()将当前元素x与y比较后返回bool值;
++++C18.5.13、unique |
++++立钻哥哥:unique函数的作用是移除list容器中相邻重复的元素(只保留一个);
void unique();void unique(not_equal_to<T> pr); |
++++对于第1个(不带参数)unique函数,它的作用是删除相邻元素中相等的元素,这些相同的元素只保留其中一个;对于第2个unique函数,它的作用是删除所有与第1个元素不等的元素;
++++C18.5.14、merge |
++++立钻哥哥:merge函数的作用是将两个list容器中元素合并;
void merge(list<T, Allocator>& x);void merge(list<T, Allocator>& x, greater<T> pr); |
++++将容器x中的元素插入到当前的list容器中后,容器x为空;
++++为了使合并后容器中的元素有序,需要在合并前先对容器中的元素进行排序;
++++C18.5.15、sort |
++++立钻哥哥:sort函数的作用是将list容器中的元素进行排序;
void sort();void sort(greater<T> pr); |
++++调用不带参数的sort函数时,将对list容器中的元素进行升序排列;调用带参数的sort函数时,将对list容器中的元素进行降序排列;
++++C18.5.16、reverse |
++++立钻哥哥:reverse函数的作用是将list容器中元素逆置;
void reverse(); |
++++逆置后,list容器中的元素以相反的顺序存放;
++C19、stack类 |
++C19.1、构造类函数 |
++++立钻哥哥:stack容器的构造类函数包括构造函数;stack的构造函数:创建stack对象;
stack();stack(const stack&);stack& operator=(const stack&); |
++++在更高版本的C++标准库中,stack的构造函数定义如下:stack(const Container& ctnr=Container());
++C19.2、容量类函数 |
++++C19.2.1、empty |
++++立钻哥哥:empty函数的作用是判断stack容器是否为空;
bool empty() const; |
++++C19.2.2、size |
++++立钻哥哥:size函数的作用是返回stack容器中的实际元素个数;
size_type size() const; |
++C19.3、存取类函数 |
++++立钻哥哥:stack存取类函数主要包括top函数;top函数返回stack中的栈顶元素;
value_type& top();const value_type& top() const; |
++++stack中的top函数的实现是通过调用顺序容器的back函数实现的;
++C19.4、操作类函数 |
++++C19.4.1、push |
++++立钻哥哥:push函数的作用是将元素x入栈,即把元素x插入到stack的栈顶元素;
void push(const T& x); |
++++stack的push函数是利用顺序容器的push_back函数实现的;
++++C19.4.2、pop |
++++立钻哥哥:pop函数的作用是移除stack容器的栈顶元素;
void pop(); |
++++调用pop函数后,stack容器中的大小减1;stack容器中的pop函数是通过调用顺序容器的pop_back函数实现的;
++C20、queue类 |
++C20.1、构造类函数 |
++++立钻哥哥:queue容器的构造类函数包括构造函数;queue的构造函数:创建queue对象;queue构造函数的作用是创建queue容器并初始化容器中的元素;
queue();queue(const queue&);queue& operator=(const queue&); |
++++在新版本的C++标准库中,queue的构造函数定义:queue(const Container& ctnr=Container());;它可以利用顺序容器Container构造queue对象,使用方法同stack中的构造函数;
++C20.2、容量类函数 |
++++C20.2.1、empty |
++++立钻哥哥:empty函数的作用是判断queue是否为空;
bool empty() const; |
++++C20.2.2、size |
++++立钻哥哥:size函数的作用是返回queue容器的大小,即实际元素个数;
size_type size() const; |
++C20.3、存取类函数 |
++++C20.3.1、front |
++++立钻哥哥:front函数的作用是返回queue容器中的队头元素,即最早进入队列中的元素;所谓队列,就是只能在一端进行插入元素操作,另一端进行删除元素操作的线性表;其中,插入元素被称为入队列,删除元素被称为出队列;插入的一端被称为队尾,删除的一端被称为队头;
value_type& front();const value_type& front() const; |
++++C20.3.2、back |
++++立钻哥哥:back函数的作用是返回queue容器中的队尾元素,即当前最后进入队列中的元素;
value_type& back();const value_type& back() const; |
++C20.4、操作类函数 |
++++C20.4.1、push |
++++立钻哥哥:push函数的作用是在queue容器的末尾追加一个新元素x;此时,队尾元素为x;
void push(const T& x); |
++++调用push函数之后,queue容器的实际大小自动增1;
++++C20.4.2、pop |
++++立钻哥哥:pop函数的作用是移除queue容器中的队头元素,即最先进入到队列中的元素;
void pop(); |
++++调用pop函数之后,queue容器的实际大小自动减1;
++C21、set类 |
++C21.1、构造类函数 |
++++立钻哥哥:set容器的构造类函数包括构造函数和析构函数;set的构造函数:创建set对象;set构造函数的作用是创建set容器并将容器初始化;
set(const Pred& comp=Pred(), const Allocator& =Allocator());set(const set& x);set(const value_type *first, const value_type *last, const Pred& comp=Pred(), const Allocator& =Allocator());~set(); |
++++与前面的标准容器类似,在新版本的C++标准库中,set容器可以使用迭代器构造当前的set对象;而在旧版本的C++标准库中,允许利用指针对象初始化set对象;
++C21.2、迭代器类函数 |
++++C21.2.1、begin/end |
++++立钻哥哥:begin函数的作用是返回set容器中第一个元素的迭代器;end函数的作用是返回set容器中最后一个元素的迭代器,实际上返回的是最后一个元素的后一个位置;
iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; |
++++begin函数返回set容器的一个元素的位置,end函数返回set容器最后一个元素的下一个位置;这样在for循环中,从it=s.begin()到it
++++C21.2.2、rbegin/rend |
++++立钻哥哥:rbegin函数的作用是返回与最后一个元素相反的反向迭代器;rend函数的作用是判断deque容器是否为空,即deque容器的元素个数是否为0;
reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; |
++++因为在set容器中,元素都是按照从小到大排列,所以rbegin函数返回最大元素的位置,rend函数返回最小元素的前一个位置;
++C21.3、容量类函数 |
++++C21.3.1、empty |
++++立钻哥哥:empty函数的作用是判断set是否为空;
bool empty() const; |
++++C21.3.2、size |
++++立钻哥哥:size函数的作用是返回set中的实际元素个数;
size_type size() const; |
++++C21.3.3、max_size |
++++立钻哥哥:max_size函数的作用是返回set能容纳的最大元素个数;
size_type max_size() const; |
++++max_size函数通常可以用于往set容器中插入元素之前的判定,当插入大量元素时,先利用max_size函数判定一下是否能插入这么多元素,然后再进行插入操作;
++C21.4、操作类函数 |
++++C21.4.1、insert |
++++立钻哥哥:insert函数的作用是将一个元素或一系列元素插入到set容器中;
pair<iterator, bool> insert(const value_type& x);iterator insert(iterator it, const value_type& x);void insert(const value_type *first, const value_type *last); |
++++对于第1个insert函数来说,如果返回值为r,则r.first表示当前迭代器指向的元素位置,r.second的值只有两个:true和false,true表示插入成功,false表示插入失败;
++++C21.4.2、swap |
++++立钻哥哥:swap函数的作用是将当前的set容器中的内容与str中的内容交换;
void swap(set& str); |
++++如果allocator==str.allocator,则函数的执行时间是常数;否则,将需要执行大量的元素赋值和构造函数的操作;
++++C21.4.3、erase |
++++立钻哥哥:erase函数的作用是删除set中的元素;
void erase(iterator it);size_type erase(const key_type& x);void erase(iterator first, iterator last); |
++++删除元素后,set中的元素个数自动递减;
++++C21.4.4、clear |
++++立钻哥哥:clear函数将当前的set容器中的元素清空;
void clear(); |
++++clear函数通过调用erase(begin(), end())实现;
++++C21.4.5、find |
++++立钻哥哥:find函数的作用是返回set容器中元素x的迭代器;
iterator find(const key_type& x)const; |
++++[函数的返回值]:如果在set中找到元素x,则返回x的迭代器;否则,返回成员函数end的值;
++++C21.4.6、count |
++++立钻哥哥:count函数的作用是在set容器中查找值为x的元素,并返回它在容器中出现的次数;
size_type count(const key_type& x)const; |
++++在set容器中,因为不允许出现两个值相同的元素,所以如果要查找的元素存在,则返回值都是1;否则,返回值为0;
++++C21.4.7、lower_bound/upper_bound |
++++立钻哥哥:lower_bound函数返回第一个不小于元素x的迭代器;upper_bound函数返回第一个大于元素x的迭代器;
iterator lower_bound(const key_type& x)const;iterator upper_bound(const key_type& x)const; |
++++lower_bound函数返回[first, x]的下界,upper_bound函数返回(x, last)的上界;例如,如果set容器中的元素有10, 20, 30, 40, 50, 60,lower_bound(30)指向的元素是30,upper_bound(40)指向的元素是50;
++++C21.4.8、equal_range |
++++立钻哥哥:equal_range函数的作用是返回一对迭代器(元素x的边界);
pair<iterator, iterator> equal_range(const key_type& x)const; |
++++equal_range函数返回set容器中元素x的边界,x的上边界由pair::first表示,x的下边界由pair::second表示;
++C22、map类 |
++C22.1、构造类函数 |
++++C22.1.1、map的构造函数和析构函数 |
++++立钻哥哥:map的赋值运算符是利用一个map对象x为新map对象赋值;
map<Key, T, Compare, Allocator>& operator=(constap<Key, T, Compare, Allocator>& x); |
++++利用map对象的赋值运算符之后,两个map对象的元素值和大小均相等;
++++C22.1.2、map的赋值运算符 |
++++立钻哥哥:map的赋值运算符是利用一个map对象x为新map对象的值;
map<Key, T, Compare, Allocator>& operator=(constap<Key, T, Compare, Allocator>& x); |
++++利用map对象的赋值运算符之后,两个map对象的元素值和大小均相等;
++C22.2、迭代器类函数 |
++++C22.2.1、begin/end |
++++立钻哥哥:begin函数的作用是返回map中第一个元素的位置;end函数的作用是返回map中最后一个元素的后一个位置;
iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; |
++++map中的元素按照关键字从小到大排列,因此,迭代器函数begin总是指向map中的关键字最小的元素;
++++迭代器函数end不是返回最后一个元素的位置,而是返回最后一个元素后一个位置;
++++C22.2.2、rbegin/rend |
++++立钻哥哥:rbegin函数的作用是返回与最后一个元素相关的反向迭代器;rend函数的作用是返回map中第一个元素之前的反向迭代器;
reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; |
++++在map容器内部,元素按照关键字从小到大排列,因此,rbegin函数返回最大关键字元素的位置,而rend函数不是返回第一个元素的位置,而是返回第一个元素前一个位置;
++C22.3、容量类函数 |
++++C22.3.1、empty |
++++立钻哥哥:empty函数的作用是判断map容器是否为空,即map容器的大小是否为0;
bool empty() const; |
++++empty函数并不会修改map容器中的内容,如果要清空map容器,需要使用clear函数;
++++C22.3.2、size |
++++立钻哥哥:size函数的作用是返回map容器中元素的个数;
size_type size() const; |
++++size_type被定义为无符号整型;
++++为了控制输出的对齐方式及空格个数,可以使用流操作算子函数setiosflags和setw函数,需要包含头文件iomanip.h;例如,setiosflags(ios::right)表示靠右端输出,setw(6)表示占用宽度为6个字符;
++++C22.3.3、max_size |
++++立钻哥哥:max_size函数的作用是返回map容器中所能容纳的最大元素个数;
size_type max_size() const; |
++C22.4、存取类函数 |
++++立钻哥哥:map的存取类函数主要是下标运算符;[]运算符的主要作用是存取map中的元素;如果x与map容器中的元素关键字相等,则[]运算符返回元素值的引用位置;否则,插入一个关键字和元素值;
T& operator[](const key_type& x); |
++++[]运算符是被C++重载的运算符,不是数组中的某个元素的下标,而是map中元素的关键字;例如,mymap[6]表示关键字为6的元素;
++C22.5、操作类函数 |
++++C22.5.1、insert |
++++立钻哥哥:insert函数的作用是插入一个新元素或者一个元素序列;
pair<iterator, bool> insert(const value_type& x);iterator insert(iterator position, const value_type& x);template<class InputIterator> void insert(InputIterator first, InputIterator last); |
++++每插入一个元素,map容器的大小增加1;在map容器中,不允许有关键字相同的元素出现,因此在插入新元素时,首先要检查要插入的元素关键字是否相等,如果相等,则不能插入;
++++C22.5.2、erase |
++++立钻哥哥:erase函数的作用是从map容器中移除一个元素或一些元素;
void erase(iterator position);size_type erase(const key_type& x);void erase(iterator first, iterator last); |
++++每移除一个元素,map容器的大小减去1,且系统自动调用析构函数释放其内存单元;
++++C22.5.3、swap |
++++立钻哥哥:swap函数的作用是交换当前map容器与mp容器中的内容;
void swap(map<Key, T, Compare, Allocator>& mp); |
++++在调用swap函数时,需要保证两个map中元素类型必须保持一致,但是元素个数可以不同;
++++C22.5.4、clear |
++++立钻哥哥:clear函数的作用是清除map容器中的所有元素,并释放其内存空间;
void clear(); |
++++调用clear函数时,析构函数被自动调用,释放map对象的内存空间;
++++C22.5.5、find |
++++立钻哥哥:find函数的作用是在map容器中查找关键字为x的元素,如果找到,则返回迭代器;
iterator find(const key_type& x);const_iterator find(const key_type& x) const; |
++++key_type是一种关键字的数据类型;
++++C22.5.6、count |
++++立钻哥哥:count函数的作用是返回某个元素关键字的个数;
size_type count(const key_type& x) const; |
++++因为map中不允许有重复的关键字,所以count函数的返回值只能是1和0;
#第四篇:算法 |
【XR游戏开发QQ群:784477094】
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++虚拟现实VR资讯: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE开发基础:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系统:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0传送机制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR实战之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虚拟现实行业应用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平台上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平台热销VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR实验:以太网帧的构成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++从零开始学架构:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企业内训(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件
++++计算机组成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:云计算和雾计算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++云计算通俗讲义:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--