当前位置:首页 >> 理学 >> C++&STL复习整理

C++&STL复习整理


C++复习
C++ 一、const 的作用 1、初始化定义后,不能再改变变量的值 2、const (char) *pContent;意思是指针指向的内容是常量不可变;const (char*) pContent;意思是指针本身是常量不可变 3、const 修饰函数参数是它最广泛的一种用途,它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值) 4、const 修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。 const 修饰的对象,该对象的任何非 const 成员函数都不能被调用,因为任何非 const 成员函数会有修改成员变量的企图。 5. const 常量与 define 宏定义的区别 (1) 编译器处理方式不同 define 宏是在预处理阶段展开。 const 常量是编译运行阶段使用。 (2) 类型和安全检查不同 define 宏没有类型,不做任何类型检查,仅仅是展开。 const 常量有具体的类型,在编译阶段会执行类型检查。 (3) 存储方式不同 define 宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。 const 常量会在内存中分配(可以是堆中也可以是栈中)。 二、sizeof() 作用是返回一个对象或者类型名的字节长度,有三种语法形式 sizeof(object); sizeof(type_name); sizeof object; sizeof 也可以对一个函数调用求值,其结果是函数返回类型的大小,但函数并不会被调用。 C++规定,函数、不能确定类型的函数调用表达式、以及位域成员不能计算 sizeof 的值。 1> sizeof 的计算发生在编译时刻,所以它可以被当做常量表达式使用。例如 char ary[sizeof(int)*10] 2> 基本数据类型的 sizeof 一般的,在 32 位编译环境中,sizeof(short)为 2,sizeof(int)为 4, sizeof(long)为 4, sizeof(float)为 4,sizeof(double) 为 8,sizeof(char)为 1 3> 指针变量的 sizeof 在 32 位机器中,返回必定为 4 4> 数组的 sizeof 值等于数组所占用的内存字节数 char a1[] = "abc"; int a2[3]; 5> 结构体的 sizeof struct { int d2; double d1; 4+4+8=16 字节 short d3; char d4; }Mystruct; 的整数倍 6> 联合体的 sizeof 结构体在内存组织上是顺序式的,联合体则是重叠式的,各成员共享一段内存,所以整个联合体的 sizeof 就是其中每个 sizeof //此时偏移量是 16,sizeof(short)为 2,偏移量 16 是 2 的整数倍,所以此时总共占用了 16+2=18 字节 //此时偏移量是 18,sizeof(char)为 1,偏移量 18 是 1 的整数倍,所以此时总共占用了 18+1=19 字节 //最终所占的字节数必须是结构体中占最大字节数类型的整数倍,所以再需补 5 字节,最终为 24 字节,是 double //开始,偏移量为 0,sizeof(int)为 4,占用 4 个字节 //此时偏移量是 4,但 sizeof(double)为 8,偏移量 4 不是 8 的整数倍,需要补 4 位先,所以此时总共占用了 sizeof(a1) 为 4,每个 char 占一个字节,且末尾包含\0; sizeof(a2)为 3*4=12

最大的那个值 二、static 1、静态全局变量在全局数据区分配内存;未经初始化的静态全局变量会被程序自动初始化为 0(在函数体内声明的自动变量的值 是随机的,除非它被显式初始化) ; 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的,其他的文件即使用 extern 声明也不能使用。 2、静态局部变量在全局数据区分配内存;静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进 行初始化; 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为 0; 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束; 3、在函数的返回类型前加上 static 关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中 可见,不能被其它文件使用。 且其它文件中可以定义相同名字的函数,不会发生冲突; 4、静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。 所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。 5、静态成员函数:出现在类体外的函数定义不能指定关键字 static;静态成员之间可以相互访问,包括静态成员函数访问静态数 据成员和访问静态成员函数; 非静态成员函数可以任意地访问静态成员函数和静态数据成员;静态成员函数不能访问非静态成员函数和非静态数据成员。 三、引用 1、引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对 其进行初始化。 不能再把该引用名作为其他变量名的别名。它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单 元。 2、 “引用”与指针的区别是什么? 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差; 而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 四、值传递、指针(地址)传递、引用传递详解 值传递是单向的(实参->形参) ,参数的值只能传入,不能传出。 形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作 形参相当于是实参的“别名” ,对形参的操作其实就是对实参的操作。 五、继承 派生 通过继承,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的 成员。 我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。 论述 C++类继承的优缺点 优点:类继承是在编译时刻静态定义的,可以直接使用,类继承可以较方便的改变从父类继承的实现 缺点:1,因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现 2,父类通常至少定义了子类的部分行为,父类的任何改变都可能影响到子类的行为 3,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换,这种依赖关系先限制了灵活性并最终限 制了复用性 六、虚函数和多态性 在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数。 简单地说, 那些被 virtual 关键字修饰的成员函数, 就是虚函数。 虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism) ,多态性是将接口与实现进行分离;

虚函数的作用,是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数, 多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结 果。 C++中哪些函数不能被声明为虚函数? 普通函数(非成员函数) ,构造函数,内联成员函数、静态成员函数、友元函数。 (1)虚函数用于基类和派生类,普通函数所以不能 (2)构造函数不能是因为虚函数采用的是虚调用的方法,允许在只知道部分信息的情况的工作机制,特别允许调用只知道接口而 不知道对象的准确类型的方法, 但是调用构造函数即使要创建一个对象,那势必要知道对象的准确类型。 (3)内联成员函数的实质是在调用的地方直接将代码扩展开 (4)继承时,静态成员函数是不能被继承的,它只属于一个类,因为也不存在动态联编等 (5)友元函数不是类的成员函数,因此也不能被继承 七、重载与重写 重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同 重写也叫覆盖,指在子类中定义一个与父类中方法同名同参数列表的方法。因为子类会继承父类的方法,而重写就是将从父类继 承过来的方法重新定义一次,重新填写方法中的代码。 类成员函数的重载、重写和隐藏区别? a.成员函数被重载的特征: (1)相同的范围(在同一个类中) ; (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 b.重写是指派生类函数重写基类函数,特征是: (1)不同的范围(分别位于派生类与基类) ; (2)函数名字相同; (3)参数相同; (4)基类函数必须有 virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重 载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual 关键字。此时,基类的函数被隐藏(注 意别与覆盖混淆) 八、堆申请与释放 malloc 与 free 是 C++/C 语言的标准库函数,new/delete 是 C++的运算符。它们都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消 亡之前要自动执行析构函数。 由于 malloc/free 是库函数而不是运算符, 不在编译器控制权限之内, 不能够把执行构造函数和析构函数的任务强加于 malloc/free。 既然 new/delete 的功能完全覆盖了 malloc/free, 为什么 C++不把 malloc/free 淘汰出局呢?这是因为 C++程序经常要调用 C 函数, 而 C 程序只能用 malloc/free 管理动态内存。 九、拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等 在 C++中,三种对象需要拷贝的情况:一个对象以值传递的方式传入函数体,一个对象以值传递的方式从函数返回,一个对象需要 通过另外一个对象进行初始化。 执行先父类后子类的构造,对类中每一个数据成员递归地执行成员拷的动作。 深拷贝:如果一个类拥有资源,深拷贝意味着拷贝了资源和指针

浅拷贝:如果对象存在资源,而浅拷贝只是拷贝了指针,没有拷贝资源,这样使得两个指针指向同一份资源,造成对同一份析构 两次,程序崩溃。 临时对象:辅助一个表达式的计算 a + b + c ,或者间接构造的实参,函数返回非引用的时候,都可能产生临时对象,临时对象 生命周期,是单个语句,是右值。 临时对象的开销比局部对象小些。 STL 一、string 类 1、string 类的构造函数 1> string str("hello"); 2> string str(10, 'q'); 3> string str2(str); 4> char ch[] = "ABCDEFGHIJKLMN"; string str(ch, 10); string str2(ch + 6, ch + 10); string str3(&ch[6], &ch[10]); string str4(str, 6, 10); 2、string 类输入 string str; cin>>str; //遇到空格不在写入 str getline(cin, str); //遇到回车(换行)不在写入 str 3、string 类的查找 1> string str = "ABCDEFGHIJKLMNOPQRST" string temp_str = "EFG"; int i = str.find("JKL",5); //从第 5 个索引开始找 const char *字符 JKL //从第 2 个索引开始找 string 字符 temp_str 中保存的字符串 //从第 2 个索引开始的 10 个字符中找 const char *字符 EFG int j = str.find(temp_str, 2); int k = str.find("EFG", 2, 10); int k = str.find('L', 5); 2> rfind() find_first_of() find_last_of() 4、string 类其他 1> string str = "ABCDE"; int num = str.capacity(); num = str.size(); num = str.length(); 二、泛型编程 *、for_each(first, last, Func):将每一个范围在[first, last)中的元素应用于函数 Func 中,函数 Func 将接收范围中每一个 元素作为参数。 *、auto:用来声明自动变量。使用 auto 来代替变量的类型,前提是被明确类型的初始化变量初始化的,可以使用 auto 关键字 auto 变量必须初始化;函数和模板参数不能为 auto (一)、顺序容器 //当前分配给字符串的内存块大小

//从第 5 个索引开始找字符'L'

//查找子字符串或字符最后一次出现的索引位置 //在字符串中查找参数中任何一个字符首次出现的位置

1、vector 是数组的一种类表示,它提供了自动内存管理功能,可以动态的改变 vector 对象的长度,并随着元素的添加和删除而自动的增大 或减小。 它提供了对元素的随机访问,在尾部添加和删除元素的时间是固定的。 vector 成员函数包括如下: c.at(idx) c.front() c.back() c.size() c.empty() c.max_size() c.begin() c.end() c.rbegin() c.rend() c.capacity() //传回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range。 //传回第一个数据。 //传回最后一个数据,不检查这个数据是否存在。 //返回容器中所占据的数据个数(容量)。 //判断容器是否为空。 //返回容器中最大数据的数量。 //传回迭代器中的第一个数据地址。 //指向迭代器中的最后一个数据地址。 //传回一个逆向队列的第一个数据。 //传回一个逆向队列的最后一个数据的下一个位置。 //将[beg, end)区间中的数据赋值给 c。 //将 n 个 elem 的拷贝赋值给 c。 //删除[beg,end)区间的数据,传回下一个数据的位置。 //返回容器中实际数据的个数。

c.assign(beg,end) c.assign(n,elem) c.erase(pos) c.clear() c.pop_back() c.erase(beg,end)

//删除 pos 位置的数据,传回下一个数据的位置。 //移除容器中所有数据。 //删除最后一个数据。 //在尾部加入一个数据。 //在 pos 位置插入一个 elem 拷贝,传回新数据位置。

c.push_back(elem) c.insert(pos,elem)

c.insert(pos,n,elem) //在 pos 位置插入 n 个 elem 数据。无返回值。 c.insert(pos,beg,end) //在 pos 位置插入在[beg,end)区间的数据。无返回值。 c.resize(num) c.reserve() c1.swap(c2) swap(c1,c2) //重新指定队列的长度。 //保留适当的容量。 //将 c1 和 c2 元素互换。 //将 c1 和 c2 元素互换。 //创建一个空的 vector。 //创建一个 vector,含有 n 个数据,数据均已缺省构造产生。

vector <Elem> c vector <Elem> c(n)

vector <Elem> c1(c2) //复制一个 vector。 vector <Elem> c(n, elem)//创建一个含有 n 个 elem 拷贝的 vector。 vector <Elem> c(beg,end)//创建一个以[beg;end)区间的 vector。 c.~ vector <Elem>() 2、迭代器类型 *、copy(c.begin(), c.end(), v.begin) //前两个迭代器参数表示要复制的范围,第三个迭代器参数表示要将第一个元素复制到 什么位置 1>输入迭代器:输入迭代器必须能够访问容器中所有的值。是单向的迭代器,可以递增。 copy(istream_iterator<int,char>(cin), istream_iterator<int, char>(), v.begin()); //第一个模板参数指要读取的数据类型,第二个参数指输入流使用的字符类型。使用构造函数 cin 指由 cin 管理的输入流,省略 构造函数参数表示输入失败。 //从输入流中读取,直到文件结尾、类型不匹配或者出现其他输入故障为止。 //销毁所有数据,释放内存。

2>输出迭代器:将信息从程序传输给容器的迭代器,因此程序的输出就是容器的输入。 ostream_iterator<int, char> out_iter(cout, " "); copy(v.begin(), v.end(), out_iter); 3>正向迭代器 vector<int>::iterator iter; for (iter = v.begin(); iter != v.end(); ++iter) { cout<<*iter<<endl; } 3、list list 表示双向链表,除了第一个和最后一个元素,每个元素都与前后元素相链接。与 vector 不同的是,list 更强调元素的快速 插入和删除。 ... L.merge(L2) L.sort() L.unique() ... 4、deque 和 queue deque 表示双端队列,与容器类 vector 类似。支持随机访问。从 deque 对象的开始位置插入和删除元素的时间是固定的。所以, 如果多数操作发生在序列的起始和结尾处,应考虑使用 deque。 与 vector 不同的是,deque 还支持从开始端插入数据:push_front();... queue 不仅不允许随机访问队列元素,也不能遍历队列。把使用限制在定义队列的基本操作上。操作包含如下: q.empty() q.size() q.front() q.back() q.pop() 5、stack 与 queue 相似,限制比 vector 更多,不仅不允许随机访问栈元素,也不允许遍历栈。 s.empty() s.size() s.top() s.push(x) s.pop() //判断栈是否为空。 //返回栈中元素的数目 //返回指向栈顶元素的引用 //在栈顶插入元素 x //删除栈顶元素 q.push(elem) //判断队列是否为空。 //返回队列中元素的数目 //返回指向队首元素的引用 //返回指向队尾元素的引用 //在队尾插入元素 //删除队尾元素 //合并两个链表并使之默认升序 //从链表中删除所有是 value 的实例 //对链表进行排序,默认升序(可自定义) //将连续的相同元素压缩为单个元素 L.remove(value)

L.splice(L.begin(), L2) //将链表 L2 插入到位置 L.begin(),而后 L2 此时将为空

(二)、关联容器 关联容器提供了对元素的快速访问,也允许插入新元素,但不能指定元素的插入位置。 1、set 和 multiset 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。 集和多集的区别是:set 支持唯一键值,set 中的值都是特定的,而且只出现一次;而 multiset 中可以出现副本键,同一值可以 出现多次。

方法包含如下: s.begin() s.end() s.rbegin() s.rend() s.size() s.count(x) s.empty() s.max_size() s.find(x) s.equal_range() //返回指向第一个元素的迭代器 //返回指向最后一个元素之后的迭代器,不是最后一个元素 //返回指向集合中最后一个元素的反向迭代器 //返回指向集合中第一个元素的反向迭代器 //返回集合中元素的数目 //返回某个值 x 元素的个数 //如果集合为空,返回 true(真) //返回集合能容纳的元素的最大限值 //返回一个指向被查找到元素的迭代器 set<typename>::iterator iter = s.find(x); //返回集合中与给定值相等的上下限的两个迭代器

pair<set<string>::iterator, set<string>::iterator> p_iter; p_iter = s.equal_range(x); cout<<*p_iter.first<<endl; cout<<*p_iter.second<<endl; lower_bound() //返回指向大于(或等于)某值的第一个元素的迭代器 set<string>::iterator iter; iter = s.lower_bound(x); cout<<*iter<<endl; upper_bound() key_comp() //返回大于某个值元素的迭代器 //返回一个用于元素间值比较的函数

set<int, less<int>> s; set<int, less<int>>::key_compare kc = s.key_comp(); bool result = kc(8, 7); result = kc(7, 10); value_comp() s.clear() s.erase() insert() //返回一个用于比较元素间的值的函数 //清除所有元素 //删除集合中的元素 //在集合中插入元素

s.insert(x); s.insert(s1.begin(), s1.end()) s1.swap(s2) 并集 set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), ostream_iterator<string> (cout, " ")); // 输出集合 s1、 s2 的交集 set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), ostream_iterator<string> (cout, " ")); // 输出 s1 与 s2 的差集 2、map 和 multimap 映射和多重映射基于某一类型 Key 的键集的存在,提供对 T 类型的数据进行快速和高效的检索。 与 set 不同。set 中的 key 和 value 是 Key 类型的,而 map 中的 key 和 value 是一个 pair 结构中的两个分量。 1> map insert 的三种方法: map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1, "student_one")); //交换两个集合变量 (map 中的 swap 不是一个容器中的元素交换,而是两个容器交换。) //输出 set s1、s2 的 set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), ostream_iterator<string> (cout, " "));

mapStudent.insert(map<int, string>::value_type (2, "student_two")); mapStudent[3] = "student_three"; 2> map.erase 有 3 个重载: void erase(iterator position); size_type erase(const key_type& x); void erase(iterator first, iterator last); *、transform() :将某操作应用于指定范围的每个元素 transform 两种用法 OutputIterator transform (nputIterator first1, InputIterator last1, OutputIterator result, UnaryOperator op ); OutputIterator transform (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, int increase (int i) { return i+1; } transform(va.begin(), va.end(), vc.begin(), increase); transform(va.begin(), va.end(), vb.begin(), vc.begin(), plus<int>()); *、sort() :接受指向容器第一个元素的迭代器和指向超尾的迭代器作为参数。 *、partial_sort(beg, mid, end) :对 mid-beg 个元素进行排序,其他未排序元素之间的次序是未指定的。 (三)、智能指针模板类 智能指针是存储指向动态分配(堆)对象指针的类。能够在适当的时间自动删除指向的对象. 智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。 三个智能指针模板 auto_ptr、unique_pter、shared_ptr 都定义了类似指针对象,可以将 new 获得(直接或间接申请)的空间内存 地址赋给这种对象。 当智能指针过期时,其析构函数将使用 delete 来自动释放内存。即智能指针过期时,无需记住原来指向的 new 申请的空间地址, 因为这些内存将自动被释放。 *、在 C++中,内存分成 5 个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数 等。 堆, 就是那些由 new 分配的内存块, 他们的释放编译器不去管, 由我们的应用程序去控制, 一般一个 new 就要对应一个 delete。 如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 自由存储区,就是那些由 malloc 等分配的内存块,他和堆是十分相似的,不过它是用 free 来结束自己的生命的。 全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的 C 语言中,全局变量又分为初始化的和未初始化的 (初始化的全局变量和静态变量在一块区域,未初始化的全局 变量与静态变量在相邻的另一块区域, 同时未被初始化的对象存储区可以通过 void*来访问和操纵, 程序结束后由系统自行释放) , 在 C++里面没有这个区分了,他们共同占用同一块内存区。 常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而 // 源容器的起始地址 // 源容器的终止地址 // 目标容器的起始地址 // 函数指针 // 源容器 1 的起始地址 // 源容器 1 的终止地址 // 源容器 2 的起始地址,元素个数与 1 相同 // 目标容器的起始地址,元素个数与 1 相同

BinaryOperator binary_op ); // 函数指针

且方法很多) void Test() { int *p = new int; //定义指针*p,即在栈中分配一个空间地址,指向(存储)new 在堆中申请的地址空间的地址 *p = 10; return; } 此时会出现内存泄露的问题,但如果使用 auto_ptr<int> p(new int);不会出现此问题。 对于特定的对象,只能有一个智能指针可以拥有它,这样拥有对象的智能指针的构造函数会在函数结束时删除该对象。 void Test() { auto_ptr<int> pa(new int(10)); auto_ptr<int> pb; pb = pa; } 问题仅能执行时才能发现,此时程序容易出现崩溃等情况。而 void Test() { unique_ptr<int> pa(new int(10)); unique_ptr<int> pb; pb = pa; } 在编译时就会报错,避免了 pa 不再指向有效数据的问题。因此 unique_ptr 比 auto_ptr 更安全 //转让所有权,pa 此时变为悬挂指针:悬挂指针是一个指针,既不为空,也没有指向任何对象 //将值 10 复制到这个动态分配的地址空间中 //退出这个函数时,在栈中分配的空间地址将被系统自动释放。而堆中 new 的地址空间需要 delete 手动释放


更多相关文档:

noip复习资料(提高组c++版)_图文

这是复赛复习资料——需要有人能用心总结、整理初赛的知识,就像这份资料一样。...STL 是很多人从 C 转到 C++的重要原因。 ? C 的头文件名仍然可以用在 C++...

c++STL总结_图文

c++STL总结_计算机软件及应用_IT/计算机_专业资料。c++ STL三大容器的讲解和使用 2016 年 3 月 8 日 [C++ STL 学习总结] STL 容器 C++标准模板库:C++ ...

STL各种函数详细讲解

(next_permutation(myVec.begin(), myVec.end())); ACM/ICPC 竞赛之 STL 简介 一、关于 STL STL(Standard Template Library,标准模板库)是 C++语言标准中的...

C++ STL基础及应用实验题目

2.7 补充【例 4-15】 方法 1: //文件名:e4_15.cpp #include <iostream> #include <fstream> #include <sstream> #include <string> using namespace std;...

C++ STL学习——STL_algorithm

C++ STL 学习——STL_algorithm 今天我们来讲讲 STL 中比较大的一个库<algorithm>. 主要是一些算法的运算的实现,示例 代码上传至 https://github.com/chen...

近期出现的C++面试题整理(附详细答案)

近期出现的C++面试题整理(附详细答案)_面试_求职/职场_实用文档。C++ ...STL 有以下的一些优点: 可以方便容易地实现搜索数据或对数据排序等一系列的算法...

C++ 模板和STL_进阶_教学视频大全

C++进阶者模板和STL视频教程,达内精品在线TMOOC全套教学,在线学习进阶课程,C++ 模板和STL视频下载

C++整理

二级C的知识点整理 11页 5财富值 C&C++程序整理 11页 1财富值 C题目自己整理...函函主要引于STL 中的容器,算法,迭代器等以及函函元编程. (C++的template 是...

标准模板库STL练习题

答案: (1)谓词(predicate) 第十一章 标准模板库(STL)习题 2 (2)小于比较操作符“<” 11.1.8 C++标准库中给出的泛型算法包括 (1) 种算法。主要包括以下...

C++容器归纳总结

C++容器归纳总结_计算机软件及应用_IT/计算机_专业...不再需要容器时进行内存整理的析构函数 容器中没有...STL 内部实现时,首先分配一个非常大的内存空间预备...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com