版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年GESP编程能力认证C++四级练习题(带答案)一、单项选择题(每题2分,共20分)1.下列关于C++11新特性的描述,正确的是()A.auto关键字只能用于推导整型变量B.decltype(1+2.0)推导出的类型为intC.列表初始化不能用于自定义类型D.lambda表达式捕获列表中[=]表示以值方式捕获所有外部变量答案:D2.对于如下代码:```cppinta=3,b=4;int&&r=std::move(a+b);```下列说法正确的是()A.r是a的引用,修改r会改变aB.表达式a+b的结果被绑定到右值引用r,生命周期延长C.std::move将a+b转为左值D.编译错误,因为不能对表达式结果建立右值引用答案:B3.若希望一个类不能被继承,但又能正常创建对象,C++11之后最佳做法是()A.将构造函数设为privateB.使用final关键字修饰类C.将析构函数设为protectedD.删除拷贝构造函数答案:B4.下列代码输出为()```cppinclude<iostream>template<typenameT>voidf(T&&t){std::cout<<1;}voidf(int&t){std::cout<<2;}intmain(){intx=0;f(x);}```A.1B.2C.编译错误,存在二义性D.运行时错误答案:B5.关于std::unordered_map,下列说法错误的是()A.平均插入复杂度为常数B.元素按键值升序排列C.需要为自定义键类型提供hash函数D.支持[]运算符重载答案:B6.下列关于智能指针的代码,运行后不会导致悬空指针的是()A.```cppintp=newint(5);std::shared_ptr<int>sp(p);deletep;```B.```cppstd::shared_ptr<int>sp1=std::make_shared<int>(6);std::shared_ptr<int>sp2=sp1;sp1.reset();```C.```cppstd::unique_ptr<int>up(newint(7));autop=up.release();```D.```cppstd::weak_ptr<int>wp;{std::shared_ptr<int>sp=std::make_shared<int>(8);wp=sp;}std::cout<<wp.lock();```答案:B7.以下关于类型萃取std::is_same_v<T,U>的说法正确的是()A.返回值为bool类型,运行时计算B.若T与U为不同cv限定,则恒为falseC.可用于ifconstexpr分支编译期判断D.需要包含头文件<typeindex>答案:C8.代码:```cppconstexprintfoo(intn){returnn>0?nfoo(n1):1;}intx=foo(5);```若编译器支持C++17,则x的值为()A.未定义行为B.120C.编译错误,constexpr递归深度超限D.运行时错误答案:B9.下列关于std::variant的描述,正确的是()A.同一时刻可存储多个备选类型值B.大小等于最大备选类型大小加上管理字段C.访问值时若类型不匹配将抛出std::bad_variant_accessD.不能存放引用类型,但可存放void答案:C10.以下代码输出为()```cppinclude<iostream>structBase{virtualvoidshow()=0;virtual~Base()=default;};structDer:Base{voidshow()overridefinal{std::cout<<"D";}};intmain(){Basep=newDer;p>show();deletep;}```A.编译错误,final不能修饰override函数B.输出DC.输出BD.运行时崩溃答案:B二、程序阅读题(每题5分,共20分)11.阅读程序,写出输出结果:```cppinclude<iostream>include<vector>include<algorithm>intmain(){std::vector<int>v{3,1,4,1,5,9};std::nth_element(v.begin(),v.begin()+3,v.end());for(inti=0;i<4;i++)std::cout<<v[i]<<"";}```答案:113412.写出下面程序运行结果:```cppinclude<iostream>template<intN>structFact{staticconstexprlonglongvalue=NFact<N1>::value;};template<>structFact<0>{staticconstexprlonglongvalue=1;};intmain(){std::cout<<Fact<10>::value;}```答案:362880013.写出输出:```cppinclude<iostream>include<memory>structA{intx;A(intv):x(v){}~A(){std::cout<<x;}};intmain(){std::shared_ptr<A>p1=std::make_shared<A>(1);std::shared_ptr<A>p2=std::make_shared<A>(2);p1=p2;std::cout<<"M";}```答案:M214.写出输出:```cppinclude<iostream>include<variant>intmain(){std::variant<int,double>v=3.14;std::visit([](auto&&arg){std::cout<<sizeof(arg);},v);}```答案:8三、程序填空题(每空3分,共30分)15.实现一个编译期计算斐波那契数的模板元编程,补充缺失部分:```cpptemplate<intN>structFib{staticconstexprintvalue=____(1)____;};template<>structFib<0>{staticconstexprintvalue=0;};template<>structFib<1>{staticconstexprintvalue=1;};static_assert(Fib<8>::value==21);```答案:Fib<N1>::value+Fib<N2>::value16.实现一个删除数组中重复元素的函数,要求原地删除并返回新长度,补充缺失部分:```cpptemplate<typenameIt>Itunique_inplace(Itfirst,Itlast){if(first==last)returnlast;Itresult=first;while(++first!=last){if(!(result==first))(++result)=first;}return____(2)____;}```答案:result+117.实现一个线程安全的单例,使用C++11magicstatic,补充缺失:```cppclassSingleton{public:staticSingleton&instance(){____(3)____returnins;}private:Singleton()=default;~Singleton()=default;Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;};```答案:staticSingletonins;18.实现一个编译期判断类型是否为指针的typetrait,补充缺失:```cpptemplate<typenameT>structis_pointer_helper:std::false_type{};template<typenameT>structis_pointer_helper<T>:std::____(4)____{};template<typenameT>inlineconstexprboolis_pointer_v=is_pointer_helper<T>::value;```答案:true_type19.实现一个将整数转为二进制字符串的constexpr函数,补充缺失:```cppconstexprconstcharto_bin(unsignedintn){staticcharbuf[33]={};charp=buf+32;p='\0';if(n==0){p='0';returnp;}while(n){p=(n&1)?'1':'0';n=____(5)____;}returnp;}```答案:n>>120.实现一个变参模板求和函数,补充缺失:```cpptemplate<typename...Args>autosum(Args...args){return(____(6)____);}```答案:args+...+021.实现一个std::enable_if_t用于只在整数类型时实例化的函数,补充缺失:```cpptemplate<typenameT>std::enable_if_t<____(7)____,bool>is_odd(Tt){returnt&1;}```答案:std::is_integral_v<T>22.实现一个将lambda转为函数指针的辅助,补充缺失:```cpptemplate<typenameT>structlambda_traits;template<typenameR,typename...Args>structlambda_traits<R()(Args...)>{usingtype=R(Args...);};template<typenameLambda>inlineautolambda_to_ptr(Lambda&&){staticautocache=____(8)____;return+cache;}```答案:Lambda{}23.实现一个编译期字符串哈希,补充缺失:```cppconstexprunsignedlonglongstr_hash(constchars,unsignedlonglongh=0){returns?str_hash(s+1,____(9)____):h;}```答案:h131+s24.实现一个std::array的旋转,将前k个元素移到末尾,补充缺失:```cpptemplate<typenameT,size_tN>voidrotate_left(std::array<T,N>&a,size_tk){k%=N;std::rotate(a.begin(),____(10)____,a.end());}```答案:a.begin()+k四、编程题(共30分)25.最小循环移位(10分)【问题描述】给定一个长度为n(1≤n≤2×10^6)的小写字母字符串s,求其字典序最小的循环移位。【输入格式】一行,字符串s,仅含小写字母,长度n。【输出格式】输出字典序最小的循环移位结果。【样例输入】abab【样例输出】abab【要求】时间复杂度O(n),空间复杂度O(n)。参考实现:```cppinclude<bits/stdc++.h>usingnamespacestd;stringmin_cyclic(conststring&s){intn=s.size();stringt=s+s;inti=0,j=1,k=0;while(i<n&&j<n&&k<n){intd=t[i+k]t[j+k];if(d==0){++k;continue;}if(d>0)i=i+k+1;elsej=j+k+1;if(i==j)++j;k=0;}intp=min(i,j);returnt.substr(p,n);}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);strings;cin>>s;cout<<min_cyclic(s);return0;}```26.可并堆维护区间第k小(20分)【问题描述】给定长为n(1≤n≤5×10^5)的整数序列a,初始有序,有m(1≤m≤10^5)次操作:1lrk:查询区间[l,r]内第k小值(1≤k≤rl+1)2lr:将区间[l,r]内所有元素加1(保证加后仍在int范围内)【输入格式】第一行nm第二行n个整数,初始序列接下来m行,每行一个操作【输出格式】对每个查询输出一行答案【样例输入】5412345115322411531231【样例输出】343【要求】时间复杂度O((n+m)logn),空间复杂度O(nlogn)。参考实现(整体二分+树状数组):```cppinclude<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintMAX=5e5+5;intn,m,a[MAX],ans[MAX];structQuery{intop,l,r,k,id;}q[MAX],lq[MAX],rq[MAX];llc[MAX];voidadd(intx,intv){for(;x<=n;x+=x&x)c[x]+=v;}llask(intx){lls=0;for(;x;x=x&x)s+=c[x];returns;}voidsolve(intql,intqr,intL,intR){if(ql>qr)return;if(L==R){for(inti=ql;i<=qr;i++)if(q[i].op==1)ans[q[i].id]=L;return;}intmid=(L+R)>>1,cntl=0,cntr=0;for(inti=ql;i<=qr;i++){if(q[i].op==2){if(q[i].k>mid){add(q[i].l,1);add(q[i].r+1,1);rq[++cntr]=q[i];}elselq[++cntl]=q[i];}else{llt=ask(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届广西昭平县中考联考物理试卷含解析
- 山东省济南市章丘市达标名校2026年中考适应性考试物理试题含解析
- 混凝土工程施工方案技术交底
- 2026届江苏省泰州市海陵中考押题物理预测卷含解析
- 2026届福建省福州市五校联考中考冲刺卷物理试题含解析
- 危重患者营养支持的护理评估与实施
- 断肢再植术后石膏固定护理
- 三高患者的睡眠管理
- 巴彦县2025届四年级数学第二学期期中预测试题含答案解析
- 压疮护理课件下载及交流
- 处方集培训课件
- 村民委员会组织法课件
- 沈阳城投集团考试题及答案
- 钢琴曲《阿拉伯风》课件
- 2024-2025学年湖南省长沙市雅礼中学高一下学期期末数学试题及答案
- 介绍家乡:西昌
- 鞋子清洗护理知识培训课件
- 企业网络布线安装手册
- 历年中医内科副高真题及答案
- 党建主题公园内设计方案
- 干眼症的睑板腺按摩
评论
0/150
提交评论