版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2025年GESP編程能力認(rèn)證C++四級(jí)練習(xí)題(帶答案)一、單項(xiàng)選擇題(每題2分,共20分)1.下列關(guān)于C++11新特性的描述,正確的是()A.auto關(guān)鍵字只能用于推導(dǎo)整型變量B.decltype(1+2.0)推導(dǎo)出的類型為intC.列表初始化不能用于自定義類型D.lambda表達(dá)式捕獲列表中[=]表示以值方式捕獲所有外部變量答案:D2.對(duì)于如下代碼:```cppinta=3,b=4;int&&r=std::move(a+b);```下列說法正確的是()A.r是a的引用,修改r會(huì)改變aB.表達(dá)式a+b的結(jié)果被綁定到右值引用r,生命周期延長C.std::move將a+b轉(zhuǎn)為左值D.編譯錯(cuò)誤,因?yàn)椴荒軐?duì)表達(dá)式結(jié)果建立右值引用答案:B3.若希望一個(gè)類不能被繼承,但又能正常創(chuàng)建對(duì)象,C++11之后最佳做法是()A.將構(gòu)造函數(shù)設(shè)為privateB.使用final關(guān)鍵字修飾類C.將析構(gòu)函數(shù)設(shè)為protectedD.刪除拷貝構(gòu)造函數(shù)答案: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.編譯錯(cuò)誤,存在二義性D.運(yùn)行時(shí)錯(cuò)誤答案:B5.關(guān)于std::unordered_map,下列說法錯(cuò)誤的是()A.平均插入復(fù)雜度為常數(shù)B.元素按鍵值升序排列C.需要為自定義鍵類型提供hash函數(shù)D.支持[]運(yùn)算符重載答案:B6.下列關(guān)于智能指針的代碼,運(yùn)行后不會(huì)導(dǎo)致懸空指針的是()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.以下關(guān)于類型萃取std::is_same_v<T,U>的說法正確的是()A.返回值為bool類型,運(yùn)行時(shí)計(jì)算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.編譯錯(cuò)誤,constexpr遞歸深度超限D(zhuǎn).運(yùn)行時(shí)錯(cuò)誤答案:B9.下列關(guān)于std::variant的描述,正確的是()A.同一時(shí)刻可存儲(chǔ)多個(gè)備選類型值B.大小等于最大備選類型大小加上管理字段C.訪問值時(shí)若類型不匹配將拋出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.編譯錯(cuò)誤,final不能修飾override函數(shù)B.輸出DC.輸出BD.運(yùn)行時(shí)崩潰答案:B二、程序閱讀題(每題5分,共20分)11.閱讀程序,寫出輸出結(jié)果:```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.寫出下面程序運(yùn)行結(jié)果:```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.實(shí)現(xiàn)一個(gè)編譯期計(jì)算斐波那契數(shù)的模板元編程,補(bǔ)充缺失部分:```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.實(shí)現(xiàn)一個(gè)刪除數(shù)組中重復(fù)元素的函數(shù),要求原地刪除并返回新長度,補(bǔ)充缺失部分:```cpptemplate<typenameIt>Itunique_inplace(Itfirst,Itlast){if(first==last)returnlast;Itresult=first;while(++first!=last){if(!(result==first))(++result)=first;}return____(2)____;}```答案:result+117.實(shí)現(xiàn)一個(gè)線程安全的單例,使用C++11magicstatic,補(bǔ)充缺失:```cppclassSingleton{public:staticSingleton&instance(){____(3)____returnins;}private:Singleton()=default;~Singleton()=default;Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;};```答案:staticSingletonins;18.實(shí)現(xiàn)一個(gè)編譯期判斷類型是否為指針的typetrait,補(bǔ)充缺失:```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.實(shí)現(xiàn)一個(gè)將整數(shù)轉(zhuǎn)為二進(jìn)制字符串的constexpr函數(shù),補(bǔ)充缺失:```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.實(shí)現(xiàn)一個(gè)變參模板求和函數(shù),補(bǔ)充缺失:```cpptemplate<typename...Args>autosum(Args...args){return(____(6)____);}```答案:args+...+021.實(shí)現(xiàn)一個(gè)std::enable_if_t用于只在整數(shù)類型時(shí)實(shí)例化的函數(shù),補(bǔ)充缺失:```cpptemplate<typenameT>std::enable_if_t<____(7)____,bool>is_odd(Tt){returnt&1;}```答案:std::is_integral_v<T>22.實(shí)現(xiàn)一個(gè)將lambda轉(zhuǎn)為函數(shù)指針的輔助,補(bǔ)充缺失:```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.實(shí)現(xiàn)一個(gè)編譯期字符串哈希,補(bǔ)充缺失:```cppconstexprunsignedlonglongstr_hash(constchars,unsignedlonglongh=0){returns?str_hash(s+1,____(9)____):h;}```答案:h131+s24.實(shí)現(xiàn)一個(gè)std::array的旋轉(zhuǎn),將前k個(gè)元素移到末尾,補(bǔ)充缺失:```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.最小循環(huán)移位(10分)【問題描述】給定一個(gè)長度為n(1≤n≤2×10^6)的小寫字母字符串s,求其字典序最小的循環(huán)移位?!据斎敫袷健恳恍?,字符串s,僅含小寫字母,長度n?!据敵龈袷健枯敵鲎值湫蜃钚〉难h(huán)移位結(jié)果?!緲永斎搿縜bab【樣例輸出】abab【要求】時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)。參考實(shí)現(xià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.可并堆維護(hù)區(qū)間第k?。?0分)【問題描述】給定長為n(1≤n≤5×10^5)的整數(shù)序列a,初始有序,有m(1≤m≤10^5)次操作:1lrk:查詢區(qū)間[l,r]內(nèi)第k小值(1≤k≤rl+1)2lr:將區(qū)間[l,r]內(nèi)所有元素加1(保證加后仍在int范圍內(nèi))【輸入格式】第一行nm第二行n個(gè)整數(shù),初始序列接下來m行,每行一個(gè)操作【輸出格式】對(duì)每個(gè)查詢輸出一行答案【樣例輸入】5412345115322411531231【樣例輸出】343【要求】時(shí)間復(fù)雜度O((n+m)logn),空間復(fù)雜度O(nlogn)。參考實(shí)現(xiàn)(整體二分+樹狀數(shù)組):```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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園保教工作規(guī)劃及家園合作方案
- 壽光營銷推廣方案(3篇)
- 大橋特大施工方案(3篇)
- 富平廚房施工方案(3篇)
- 山地農(nóng)渠施工方案(3篇)
- 新春手機(jī)營銷方案(3篇)
- 擺攤冰淇淋營銷方案(3篇)
- 汽車黑話營銷方案(3篇)
- 圍巾營銷方案主題(3篇)
- 晨光書店?duì)I銷方案(3篇)
- TCECS10270-2023混凝土抑溫抗裂防水劑
- 【語 文】第19課《大雁歸來》課件 2025-2026學(xué)年統(tǒng)編版語文七年級(jí)上冊(cè)
- 餐飲簽協(xié)議合同范本
- 空調(diào)維修施工方案
- 2025河南洛陽市瀍河區(qū)區(qū)屬國有企業(yè)招聘14人筆試考試備考題庫及答案解析
- 醫(yī)德醫(yī)風(fēng)行風(fēng)培訓(xùn)
- 中建建筑工程施工工藝質(zhì)量標(biāo)準(zhǔn)化手冊(cè)
- 基本醫(yī)療衛(wèi)生和健康促進(jìn)法培訓(xùn)課件
- 向量處理課件
- 《中國近現(xiàn)代史綱要》復(fù)習(xí)資料大全(完美版)
- 2021國網(wǎng)公司營銷線損調(diào)考題庫-導(dǎo)出版
評(píng)論
0/150
提交評(píng)論