C++之模板及标准模板类
- 格式:pdf
- 大小:1.32 MB
- 文档页数:78
(0166)《面向对象技术》复习思考题一、选择题1、以下说法中正确的是( )A.C++程序总是从第一个定义的函数开始执行B.C++程序总是从main函数开始执行C.C++函数必须有返回值,否则不能使用函数D.C++程序中有调用关系的所有函数必须放在同一个程序文件中2、一个函数功能不太复杂,但要求被频繁调用,选用()A.内联函数 B.重载函数C.递归函数 D.嵌套函数3、构造函数不具备的特征是 ( )A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明4、下列不是描述类的成员函数的是()A. 友元函数 B.析构函数C.构造函数 D.拷贝构造函数5、int Func(int,int);不可与下列哪个函数构成重载()A.int Func(int,int,int); B.double Func(int,int);C.double Func(double,double);D.double Func(int,double);6、一个类可包含析构函数的个数是()A.0个 B.1个C.至少一个D.0个或多个7、在编译指令中,宏定义使用哪个指令()A.#include B.#defineC.#if D.#else8、在关键字public后面定义的成员为类的( )A.私有成员B. 保护成员C. 公有成员D.任何成员9、下列关于指针的运算中,( )是非法的。
A.两个指针在一定条件下,可以进行相等或不等的运算;B.可以用一个空指针赋值给某个指针;C.一个指针可以加上两个整数之差;D.两个指针在一定条件下,可以相加。
10、在C++中,关于下列设置缺省参数值的描述中,正确的是( )。
A. 不允许设置缺省参数值;B. 在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;C. 只能在函数的定义中指定参数的缺省值;D. 设置缺省参数值时,必须全部都设置。
11、预处理命令在程序中是以( )开头的。
STL(标准模板库)基本概念⼀、什么是STLSTL(Standard Template Library,标准模板库)的从⼴义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进⾏⽆缝地连接。
⼏乎所有的代码都采⽤了模板类和模板函数的⽅式,这相⽐于传统的由函数和类组成的库来说提供了更好的代码重⽤机会。
在C++标准中,STL被组织为下⾯的13个头⽂件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。
STL详细的说六⼤组件– 容器(Container)– 算法(Algorithm)– 迭代器(Iterator)– 仿函数(Function object)– 适配器(Adaptor)– 空间配制器(allocator)使⽤STL的好处1)STL是C++的⼀部分,因此不⽤额外安装什么,它被内建在你的编译器之内。
2)STL的⼀个重要特点是数据结构和算法的分离。
尽管这是个简单的概念,但是这种分离确实使得STL变得⾮常通⽤。
例如,在STL的vector容器中,可以放⼊元素、基础数据类型变量、元素的地址;STL的sort()函数可以⽤来操作vector,list等容器。
1)程序员可以不⽤思考STL具体的实现过程,只要能够熟练使⽤STL就OK了。
这样他们就可以把精⼒放在程序开发的别的⽅⾯。
2) STL具有⾼可重⽤性,⾼性能,⾼移植性,跨平台的优点。
⾼可重⽤性:STL中⼏乎所有的代码都采⽤了模板类和模版函数的⽅式实现,这相⽐于传统的由函数和类组成的库来说提供了更好的代码重⽤机会。
C++语法总结(一)1. I/O流的常用控制符dec 置基数为10hex 置基数为16oct 置基数为8setfill(c) 设填充字符为Csetprecision(n) 设显示小数精度为n位setw(n) 设域宽为N个字符setiosflags(ios::fixed) 固定的符点显示setiosflags(ios::scientific)指数表示setiosflags(ios::left) 左对齐setiosflags(ios::right) 右对齐setiosflags(ios::skipws) 忽略前导空白setiosflags(ios::uppercase) 16进制数大写输出setiosflags(ios::lowercase) 6进制数小写输出setiosflags(ios::showpoint) 显示小数点setiosflags(ios::showpos) 正数前面加上正号2.头文件:*iostream.h* *iomanip.h* *stdlib.h*cout/cin 流的控制符 exit(0)3.指针的几种类型:int (*p)();p为指向函数的指针变量,该函数带回一个整形值int *p();p为带回一个指针的函数,该指针指向整形数据int (**)[n]p为一个指向一个指针变量的指针变量,被指向的指针变量指向一个含n个整形数据的一维数组4.构造函数和析构函数特点及其区别:a.构造函数可以有任意个形参,还可以重载(多个参数个数不同的函数);但析构函数不能有形参,因为是系统自动调用的.b.构造函数不可以任意调用,只准系统调用;而析构函数不仅系统调用,也可以任意调用.5.构造函数和析构函数什么时候自动运行?(例61)构造函数:一般在定义类对象时自动运行.析构函数:如果一个函数中定义了一个对象,则在这个函数运行结束时就执行一次;当一个对象是使用NEW运算符被动态创建的,在使用DELETE运算符释放它时,DELETE将会自动调用析构函数.拷贝初始化构造函数:当用tpoint N(M);语句时调用一次;当对象作为实参向形参传递时,即对形参初始化时执行一次;当遇到M=return(N);语句,即对M进行初始化时调用一次;6. this 指针用法:例63中,当程序执行语句list elem(i);时,系统对this指针进行了如下的缺省赋值:this=&list;赋值成员函数举例(此例在例63基础上):void Assign(linear_list&);//说明语句;void linear_list::Assign(linear_list&p){if(&p==this)return;nmax=p.nmax;nelem=p.nelem;list=new int[nmax];for(int i=0;i<nmax;i++)list[i]=p.list[i];}7.const,volatile对象和const,volatile成员函数格式:const person per/volatile person per;int func(int) const;/char func(int) volatile;说明:1.普通对象既可以访问const对象,又可以访问volatile对象;2.const对象只能访问用const修饰的成员函数;volatile对象只能访问用其所长volatile修饰的成员函数;3.也可以同时说明为const volatile对象或const volatile成员函数;const volatile对象只能访问const volatile成员函数;const/volatile对象也能访问const volatile成员函数;8.不同继承方式的基类和派生类特性------------------------------------------------继承方式 | 基类特性 | 派生类特性------------------------------------------------| public | public公有继承 | protected | protected| private | 不可访问------------------------------------------------| public | private私有继承 | protected | private| private | 不可访问------------------------------------------------| public | protected保护继承 | protected | protected| private | 不可访问------------------------------------------------A:帮助理解:1)对于公有继承方式:a.基类成员对其对象的可见性:公有成员可见,其他不可见。
c语言面试试讲教案万能模板共3篇(实用版)编制人:______审核人:______审批人:______编制单位:______编制时间:__年__月__日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的实用资料,如工作总结、工作报告、文案策划、工作计划、作文大全、教案大全、演讲稿、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor.I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of practical materials for everyone, such as work summaries, work reports, copywriting planning, work plans, essay summaries, lesson plans, speeches, and other materials. If you want to learn about different data formats and writing methods, please stay tuned!c语言面试试讲教案万能模板共3篇本文旨在提供一份万能的C语言面试教案模板,帮助准备面试的求职者快速了解所需掌握的C语言知识,从而在面试中更加从容自信地回答问题。
2022-2023年安全员之C证(专职安全员)练习题(一)及答案单选题(共50题)1、滑动模板支承杆一般用()的圆钢或螺纹钢制成。
A.ф25B.ф20C.ф35D.ф15【答案】 A2、焊机一次侧电源线长度最大不得超过()m。
A.5B.10C.15D.20【答案】 A3、当采用龙门桅杆滑移法吊装时,其上部横梁的改制要符合国家的有关标准要求,焊缝应作()。
A.80%磁粉探伤B.100%磁粉探伤C.80%超声波探伤D.100%超声波探伤【答案】 D4、土石根据其坚硬程度和开挖方法及使用工具可分为()类。
A.5B.6C.7D.8【答案】 D5、手拉葫芦的起重链条直径磨损超过()应予报废更新。
A.5%B.8%C.9%D.10%【答案】 D6、工地职工食堂要()。
A.防火B.防食物中毒C.防蚊蝇D.防偷盗【答案】 B7、人工开挖土方时,两个人的操作间距应保持()。
A.1mB.1~2mC.2~3mD.3.5~4m【答案】 C8、计算纵向或横向水平杆与立杆的连接扣件抗滑承载力时,应采用扣件抗滑承载力的设计值,其值为()。
A.10KNB.3.2KNC.8KND.40KN【答案】 C9、下述关于安全检查的注意事项说法不正确的是()。
A.建立检查档案B.坚持查改结合C.明确检查的目的和要求D.检查是最终目的【答案】 D10、高处作业吊篮的任何部位与高位输电线的安全距离不应小于()m。
A.20B.10C.5D.15【答案】 B11、生产经营单位的主要负责人依照《中华人民共和国安全生产法》第九十一条规定,受刑事处罚或者撤职处分的,自刑罚执行完毕或者受处分之日起,()内不得担任任何生产经营单位的主要负责人。
A.三年B.四年C.五年D.六年【答案】 C12、一级基坑围护结构当设计有指标时,以设计要求为依据,当无设计指标时,根据规范,以围护结构顶部位移监控值为()。
A.4cmB.3cmC.6cmD.2cm【答案】 B13、某公交项目部突发大风。
第一章C++语言编程入门★ 课程概述第1章C++语言编程入门第2章函数第3章类与对象第4章指针与引用第5章继承第6章运算符重载第7章多态与虚函数第8章群体类第9章模板第10章I/O流第11章标准模板类库STL 第12章异常处理总复习3.1 类与对象概念的引入 2.1 函数的定义及调用 1.1 C++语言的产生 4.1 指针 5.1 继承与派生7.1 运算符重载的语法 6.1 C++语言是一种面向对象的程序11.1 多态性概述 3.2 基本数据结构知识 2.1.1 函数的定义1.2 类的声明 4.1.1 数据存储 3.3 对象的声明 2.1.2 指针的声明及使用 5.2 单继承10.1 I/O流概述设计语言函数的声明各章节总结12.1一元运算符异常处理的基本语法 4.1.2 6.2 线性群体9.1 构造函数与析构函数8.1 函数模板11.2 C++程序的开发步骤标准模板类库STL简介 3.4 2.1.3 函数的调用 1.3 4.1.3 指针运算 5.2.1 公有派生 3.5 类的组合 2.1.4 函数调用的执行过程 1.4 一个简单C++程序的组成7.2 虚函数6.3 二元运算符的重载4.1.4 与对象有关的指针8.1.1 可直接访问的线性群体―― 11.3 C++语言的词法记号 5.2.2 私有派生 3.6 向量 2.2 静态成员10.2 输入输出格式控制1.5 函数调用时参数的传递4.1.5 void和const指针2.3 内联函数3.6.1 静态数据成 1.6 数据类型 6.4 特殊的运算符数组类异常处理的使用9.2 类模板 5.2.3 保护派生12.2 4.2 动态内存分配11.4 运算符与表达式链表类的使用 2.4 指针与数组 3.6.2 静态成员函数 1.7 带默认形参值的函数 4.3 多继承 5.3 抽象类7.3 作用域6.4.1 =运算符的重载 3.7 指针与函数 2.5 友元8.1.2 顺序访问群体――链表类10.3 文件输入输出1.7.1 运算符 4.4 11.5 常对象、常成员函数与常数据成双端队列 3.8 派生类的构造函数与析构函数2.5.1 作用域分类5.4 字符串1.7.2 表达式4.5 6.4.2 ++和--运算符的重载员4.6 引用2.5.2 局部变量与全局变量1.7.3 表达式中数据类型的转换12.3 标准C++库中的异常类 5.5 二义性问题11.6 控制语句 3.9 引用与函数 2.6 类的作用域及对象的生存期10.4 栈与队列用户自定义类型的输入输出 1.8 递归调用 4.7 综合实例7.4 群体数据的排序与查找6.4.3 new 8.2 虚基类和delete运算符的重载 5.6 重载函数 2.7 指针与引用 3.9.1 类作用域 1.8.1 选择语句4.8 11.7 C++语言的系统函数集合2.8 赋值兼容原则3.9.2 对象生存期1.8.2 循环语句5.7 程序实例――链表 6.4.4 []的重载4.9 3.10 面向对象标记1.8.3 转移语句进程第1章C++语言编程入门1.1 C++语言的产生1.6 数据类型1.2 C++语言是一种面向对象的1.6.1 基本数据类型程序设计语言 1.6.2 变量 1.2.1 C++语言和面向对象的 1.6.3 常量程序设计 1.6.4 自定义数据类型1.2.2 C++语言与C语言的关1.7 运算符与表达式系1.7.1 运算符 1.3 C++程序的开发步骤 1.7.2 表达式 1.4 一个简单C++程序的组成1.7.3 表达式中数据类型的转换 1.5 C++语言的词法记号 1.8 控制语句 1.5.1 字符集 1.8.1 选择语句 1.5.2 词法记号1.8.2 循环语句1.8.3 转移语句C++语言是一种已得到广泛使用的面向对象的程序设计语言。
c stl面试题C++ STL面试题导言:C++标准模板库(STL)是C++的重要组成部分,它提供了丰富的模板类和函数,用于增强C++的数据结构和算法能力。
在C++开发中,STL的掌握和应用是衡量一个开发者水平的重要指标之一。
本文将介绍一些常见的C++ STL面试题,帮助读者提升自己在STL方面的知识和技能。
一、容器类1. vector与list的区别是什么?vector和list都是常用的容器类,但在内部实现和使用上有一些区别。
- 内部实现:vector是基于动态数组的,可以快速随机访问元素,而list是基于双向链表的,插入和删除操作比较快。
- 内存占用:vector在内存中连续存储元素,所以占用的内存较少;而list是不连续存储,每个元素都有一个指针指向下一个元素,所以占用的内存较多。
- 插入和删除操作:vector在头尾以外的位置插入和删除元素的代价比较大,而list可以在任意位置高效地插入和删除。
2. 如何遍历一个vector?可以使用迭代器或者基于范围的for循环来遍历一个vector。
- 迭代器遍历:```cppstd::vector<int> vec = {1, 2, 3, 4, 5};for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " ";}```- 基于范围的for循环:```cppstd::vector<int> vec = {1, 2, 3, 4, 5};for (const auto& num : vec) {std::cout << num << " ";}```3. 如何在vector中查找指定元素?可以使用`std::find`函数来在vector中查找指定元素。
string和CString的⽐较(⼀) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳⼊C++标准之中; CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Visual C++中最常⽤的字符串类,继承⾃CSimpleStringT 类,主要应⽤在MFC和ATL编程中,主要数据类型有char(应⽤于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可); char*为C编程中最常⽤的字符串指针,⼀般以’\0’为结束标志; (⼆) 构造 ² string是⽅便的,可以从⼏乎所有的字符串构造⽽来,包括CString和char*; ² CString次之,可以从基本的⼀些字符串变量构造⽽来,包括char*等; ² char*没有构造函数,仅可以赋值; ² 举例: char* psz = “joise”; CString cstr( psz ); string str( cstr ); (三) 运算符重载 a) operator= ² string是最⽅便的,⼏乎可以直接⽤所有的字符串赋值,包括CString和char*; ² CString次之,可以直接⽤些基本的字符串赋值,包括char*等; ² char*只能由指针赋值,并且是极危险的操作,建议使⽤strcpy或者memcpy,⽽且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂; ² 举例: char *psz = NULL; psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是⼀样 memset( psz, 0, 10 ); strcpy( psz, “joise” ); CString cstr; cstr = psz; string str; str = psz; str = cstr; delete []psz; b) operator+ ² string与CString差不多,可以直接与char*进⾏加法,但不可以相互使⽤+运算符,即string str = str + cstr是⾮法的,须转换成char*; ² char*没有+运算,只能使⽤strcat把两个指针连在⼀起; ² 举例: char* psz = “joise”; CString cstr = psz; cstr = cstr + psz; string str = psz; str = str + str + psz; strcat( psz, psz ); strcat( psz, cstr );//合法 strcat( psz, str );//⾮法,由此可见,CString可⾃动转换为const char*,⽽string不⾏ c) operator += ² string是最强⼤的,⼏乎可以与所有的字符串变量+=,包括CString和char*; ² CString次之,可以与基本的⼀些字符串变量进⾏+=⽽来,包括char*等; ² char*没有+=运算符,只能使⽤strcat把两个指针连在⼀起; d) operator[] ² CString最好,当越界时会抛出断⾔异常; ² string与char*下标越界结果未定义; ² 举例: char* psz = “joise”; CString cstr = psz; cout << cstr[8]; string str = psz; cout << str[8]; cout << psz[8]; e) operator== 、operator!=、operator> 、operator< 、operator>= 、perator<= ² CString与string之间不可以进⾏⽐较,但均可以与char*进⾏⽐较,并且⽐较的是值,⽽不是地址; cout << ( psz == cstr ); cout << ( psz == str ); cout << ( str == psz ); cout << ( cstr == psz );//以上代码返回均为1 (四) 常⽤算法 a) 查找 作⽤ char* string CString 查找指定值 strchr strstr strrstr strspn find Find 第⼀个匹配的值 fild_first_of FindOneOf 从后⾯开始查找 ReserveFind 指定匹配⽅式 find_if 注:find_if中是把范围内的值挨个代⼊匹配函数直⾄返回true b) ⽐较 作⽤ char* string CString 查找指定值(区分⼤⼩写) strcmp strncmp strcoll _strncoll operator< operator> operator<= operator>= operator== operator!= Collate Compare 查找指定值(不区分⼤⼩写) _stricmp _strnicmp _stricoll _strnicoll CollateNoCase CompareNoCase 注:返回值如果<0则前⾯的值⼩于后⾯的值,反之亦然 c) 替换 作⽤ char* string CString 查找指定值 _strset _strnset replace replace_copy replace_copy_if replace_if Replace d) 插⼊ 作⽤ char* string CString 查找指定值 e) 增加 作⽤ char* string CString 动态增加值 strcat push append Append AppendChar AppendFormat f) 截取 作⽤ char* string CString 得到部分值 ⽤下标操作 substr Left Mid Right Truncate g) 移除 作⽤ char* string CString 移除部份值 remove Remove 移除空⽩值 RemoveBlanks 注:此为ATL提供,⾮C函数 remove_if Trim TrimLeft TrimRigth h) 转换⼤⼩写 作⽤ char* string CString 转换⼤⼩写 _strlwr _strupr MakeLower MakeUpper i) 与其他类型转换 作⽤ char* string CString 转化为数字 atoi atod atof Format 转化为char* c_str GetBuffer GetBufferSetLength j) 格式化 作⽤ char* string CString 格式化 sprintf Format k) 得到长度 作⽤ char* string CString 得到长度 strlen length GetLength 得到⼤⼩ size GetAllocLength l) 判断为空 作⽤ char* string CString 判断是否为空 判断是否==NULL或者第⼀个字符是否是’\0’ empty IsEmpty m) 重定义⼤⼩ 作⽤ char* string CString 重定义⼤⼩ realloc new resize GetBufferSetLength n) 释放资源 作⽤ char* string CString 释放 free delete (delete[]) ReleaseBuffer ReleaseBufferSetLength (五) 安全性 CString > string > char*; (六) 灵活性 CString > string >char*; (七) 可移植性 char* = string > CString insert Insert接上篇... (⼋) MFC中常⽤字符串结构图(此⾮⽐较,但为了⽅便查阅就⼀并算在这⼉了) (九) 总结 综上所述,我个⼈认为,在MFC、ATL中使⽤字符串尽量使⽤CString,毕竟都是微软的孩⼦,各⽅⾯都⽐其它更有优势,⽽在⾮微软平台上或对移植性要求较⾼的场合推荐使⽤string,标准模板库提供了那么强⼤的泛型算法,没必要再⾃⼰去造车轮。
C++之模板(T emplate)模板是C++提供进行编程的一种类书工具。
所以在看本文以前请先了解一下C++类书的概念及相关的知识。
1.模板的概念:模办是实现类属机制的一种工具,它的功能非常强,它是无约束类属机制和约束类属机制的集合。
它可以让用户构造模板函数。
模板,对象,函数之间的关系见下图:2.函数模板与模板函数:先见下例:#include <iostream.h>template<class T> //模板声明T max(T x,T y) //定义模板{return (x>y)? x:y;}main(){int i=10,j=56;float x1=50.34, x2=56.34;double y1=673.36, y2=465.972;cout<<"the max of i, j is:"<<max(i, j)<<"\n";cout<<"the max of x1, x2 is:" <<max(x1,x2)<<"\n";cout<<"the max of y1, y2 is:" <<max(y1,y2)<<"\n";return 1;}上面的这个程序虽然只是实现一个很简单的比较大小的问题,但如果不用模板,而用我们以前的方法,由于参数类型和返回值类型不同将需要三个函数来实现,这样是十分麻烦的。
模板成功的解决了这个问题,程序中生成了三个模板函数,其中max(i,j)用模板实参int将类型实参数T进行了实例化;max(x1,x1)用模板实参float将类型参数T进行了实例化;max(y1,y2)用模板实参double将类型参数T进行了实例化。
2022-2023年安全员之C证(专职安全员)题库及精品答案单选题(共50题)1、混凝土灌注桩、水泥土墙等支护应有()以上龄期,达到设计要求时,方能进行基坑开挖。
A.7dB.14dC.21dD.28d【答案】 D2、吊篮的电气系统应可靠地接地,接地电阻不应大于()。
A.1ΩB.2ΩC.3ΩD.4Ω【答案】 D3、在盾构法施工前必须编制好()。
A.进度计划B.器材使用计划C.职业生活计划D.应急预案【答案】 D4、案例:(背景材料)某年3月3日下午,某大桥建设工地,正在起吊重物的汽车式起重机发生侧翻,造成3名司索人员落水,其中1人获救,2人死亡。
3月3日下午,大桥建设工地现场负责人程某某安排带班人员李某某、汽车式起重机操作员孙某某等人在桥梁合拢处进行吊装作业。
16时许,孙某某在李某某的指挥下驾驶一台汽车式起重机将桥底的8片贝雷架起吊至一定位置停下,三名司索人员刘某某、何某某、颜某某在未穿戴救生衣、保险带等防护用品的情况下站在悬空(与水面距离约5米)的贝雷架上进行司索作业。
停顿保持了约一分钟,汽车式起重机发生侧翻,贝雷架连同三人一起掉入水中。
刘某某会游泳,浮出水面,被人救起,何某某、颜某某沉入水中。
何某某在20分钟后被找到,急送当地人民医院抢救,因溺水事件过长,抢救无效死亡。
当晚21时许,颜某某的尸体被打捞上岸。
A.高处作业人员违章作业B.高处作业的安全防护措施不符合要求C.违章指挥D.起重吊装超载作业【答案】 B5、施工企业安全生产文明施工动态管理行为的考核评价应符合下列哪个选项()。
A.企业资质因安全生产、文明施工受到降级处罚的,则该项不应得分B.未建立安全检查检验仪器、仪表及工具配备制度的,则该项不应得分C.安全质量标准化年度达标优良率低于国家或地方规定的,应根据具体情况评定折减分数D.实行分包的,总承包单位未制定对分包单位资质和人员资格管理制度并监督落实的,则该项不应得分【答案】 A6、下列关于高处作业吊篮悬挂机构叙述正确的一项是()。