版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
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.若希望一個類不能被繼承,但又能正常創(chuàng)建對象,C++11之后最佳做法是()A.將構造函數(shù)設為privateB.使用final關鍵字修飾類C.將析構函數(shù)設為protectedD.刪除拷貝構造函數(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.編譯錯誤,存在二義性D.運行時錯誤答案:B5.關于std::unordered_map,下列說法錯誤的是()A.平均插入復雜度為常數(shù)B.元素按鍵值升序排列C.需要為自定義鍵類型提供hash函數(shù)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函數(shù)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.實現(xiàn)一個編譯期計算斐波那契數(shù)的模板元編程,補充缺失部分:```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.實現(xiàn)一個刪除數(shù)組中重復元素的函數(shù),要求原地刪除并返回新長度,補充缺失部分:```cpptemplate<typenameIt>Itunique_inplace(Itfirst,Itlast){if(first==last)returnlast;Itresult=first;while(++first!=last){if(!(result==first))(++result)=first;}return____(2)____;}```答案:result+117.實現(xiàn)一個線程安全的單例,使用C++11magicstatic,補充缺失:```cppclassSingleton{public:staticSingleton&instance(){____(3)____returnins;}private:Singleton()=default;~Singleton()=default;Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;};```答案:staticSingletonins;18.實現(xiàn)一個編譯期判斷類型是否為指針的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.實現(xiàn)一個將整數(shù)轉為二進制字符串的constexpr函數(shù),補充缺失:```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.實現(xiàn)一個變參模板求和函數(shù),補充缺失:```cpptemplate<typename...Args>autosum(Args...args){return(____(6)____);}```答案:args+...+021.實現(xiàn)一個std::enable_if_t用于只在整數(shù)類型時實例化的函數(shù),補充缺失:```cpptemplate<typenameT>std::enable_if_t<____(7)____,bool>is_odd(Tt){returnt&1;}```答案:std::is_integral_v<T>22.實現(xiàn)一個將lambda轉為函數(shù)指針的輔助,補充缺失:```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.實現(xiàn)一個編譯期字符串哈希,補充缺失:```cppconstexprunsignedlonglongstr_hash(constchars,unsignedlonglongh=0){returns?str_hash(s+1,____(9)____):h;}```答案:h131+s24.實現(xiàn)一個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.最小循環(huán)移位(10分)【問題描述】給定一個長度為n(1≤n≤2×10^6)的小寫字母字符串s,求其字典序最小的循環(huán)移位?!据斎敫袷健恳恍?,字符串s,僅含小寫字母,長度n?!据敵龈袷健枯敵鲎值湫蜃钚〉难h(huán)移位結果?!緲永斎搿縜bab【樣例輸出】abab【要求】時間復雜度O(n),空間復雜度O(n)。參考實現(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.可并堆維護區(qū)間第k小(20分)【問題描述】給定長為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個整數(shù),初始序列接下來m行,每行一個操作【輸出格式】對每個查詢輸出一行答案【樣例輸入】5412345115322411531231【樣例輸出】343【要求】時間復雜度O((n+m)logn),空間復雜度O(nlogn)。參考實現(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 3215-2025石油、石化和天然氣工業(yè)用離心泵
- GB/T 32219-2026筒式磨機鑄造磨段
- 創(chuàng)業(yè)培訓教師授課信息反饋表
- 平臺穩(wěn)性操作員保密競賽考核試卷含答案
- 制材工安全文明測試考核試卷含答案
- 軋鋼精整工安全宣貫強化考核試卷含答案
- 橋梁支座試驗培訓
- 銀行內(nèi)部審計報告制度
- 酒店員工獎懲與激勵機制制度
- 超市員工績效考核制度
- 北京市順義區(qū)2025-2026學年八年級上學期期末考試英語試題(原卷版+解析版)
- 中學生冬季防溺水主題安全教育宣傳活動
- 2026年藥廠安全生產(chǎn)知識培訓試題(達標題)
- 初中九年級上一元二次方程計算練習題及答案詳解B2
- 中國涉外律師人才研究報告2025
- 冷庫防護制度規(guī)范
- 2026年生產(chǎn)管理崗入職性格測試題及答案
- 2026年bjt商務能力考試試題
- 廣東省廣州市番禺區(qū)2026屆高一數(shù)學第一學期期末聯(lián)考試題含解析
- 2026年廣東省佛山市高三語文聯(lián)合診斷性考試作文題及3篇范文:可以“重讀”甚至“重構”這些過往
- 老年住院患者非計劃性拔管分析2026
評論
0/150
提交評論