第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

求解,c++ 關(guān)于nth_element()的問題,具體詳情請看下面?

求解,c++ 關(guān)于nth_element()的問題,具體詳情請看下面?

慕勒3428872 2021-05-26 10:19:13
#include<iostream>#include<cstdlib>#include<vector>#include<string>#include<algorithm>using namespace std;//typedeftypedef int I;typedef char C;typedef int ARR[10];//宏定義#define N 3#define X(a,b) (((a)+(b))*3)//自定義函數(shù)聲明void f1();void output(const string &);void f2();//主函數(shù)int main(int argc,char * argv[]){f1();cout<<endl;f2();cout<<endl;cout<<argc<<ends<<* argv<<endl;system("pause");return 0;}//自定義函數(shù) 在output函數(shù)里不能改變x的值,因?yàn)閏onstvoid output(const string & x){cout<<x<<endl;}void f1(){//定義vector對象vector<string> strVect1;vector<string> strVect2;//push_back()strVect1.push_back("Sunday");strVect1.push_back("Monday");strVect1.push_back("Over");strVect1.push_back("Wednesday");strVect2.push_back("Monday");strVect2.push_back("Sunday");strVect2.push_back("Over");strVect2.push_back("Saturday");//sort()sort(strVect1.begin(),strVect1.end());sort(strVect2.begin(),strVect2.end());cout<<"Vect1:"<<endl;//for_each()for_each(strVect1.begin(),strVect1.end(),output);cout<<endl;cout<<"Vect2:"<<endl;for_each(strVect2.begin(),strVect2.end(),output);cout<<endl;cout<<"bool result=includes(strVect1.begin(),strVect1.end(),strVect2.begin(),strVect2.begin()+2):"<<endl;//includes()bool result=includes(strVect1.begin(),strVect1.end(),strVect2.begin(),strVect2.begin()+2);if(result)cout<<"result:OK"<<endl;elsecout<<"result:ERROR"<<endl;}void f2(){//定義vector對象vector<I> intVect;//push_back()intVect.push_back(7);intVect.push_back(3);intVect.push_back(9);intVect.push_back(1);intVect.push_back(0);intVect.push_back(6);intVect.push_back(5);cout<<"intVect"<<endl;//定義iterator對象vector<I>::iterator it;for(it=intVect.begin();it!=intVect.end();it++)cout<<* it<<ends;cout<<endl;//nth_element()nth_element(intVect.begin(),intVect.begin()+3,intVect.end());for(it=intVect.begin();it!=intVect.end();it++)cout<<* it<<ends;cout<<endl;}
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

nth_element()是一個(gè)典型的部分排序算法。

它的第1和第3個(gè)參數(shù),定義的是排序的范圍(或則說nth_element這個(gè)算法或函數(shù)的作用范圍),稱著first和last,是一個(gè)[ )區(qū)間。在你的例子,分別對應(yīng)那個(gè)vector的begin和end;

第2個(gè)參數(shù)的意思是:如果一個(gè)序列的first和last半包含的范圍內(nèi),如果這個(gè)序列被排序了,那個(gè)第n個(gè)位置上的元素應(yīng)該是什么。---- 白話的解釋就是:如果給你一堆數(shù)據(jù),我想看看中間值是多少,第2大的數(shù)是什么? 你該如何解決呢? 全排序當(dāng)然可以,但如果數(shù)據(jù)多,效率也許就差了。這是只有部分排序即可,也就是說只有這第n個(gè)的位置被排對了,那么其他的就不管了,排序就可以解釋了。-- 這是nth_element的應(yīng)用意義。


以你的代碼為例:你的第2個(gè)參數(shù)是intVect.begin()+3,就是想看看intVect這個(gè)序列中,【如果排序的話】,它的第4個(gè)應(yīng)該是多少?這個(gè)intVect如果全排序,應(yīng)該是:

0 1 3 5 6 7 9,

因此nth_element在確保第4個(gè)元素=5的時(shí)候,就停止排序了。 因此你后面輸出intVect的值是:

1 0 3 5 9 6 7

就是第4個(gè)=5后,當(dāng)時(shí)intVect的值。

一般在nth_element()后,都有一個(gè)類似這樣的語句:

12nth_element(intVect.begin(),intVect.begin()+3,intVect.end());cout << intVect[3]<< endl;

給你添加一點(diǎn)代碼,體會(huì)一下nth_element的概念,它其實(shí)可以有【第4個(gè)參數(shù)】的:

1234nth_element(intVect.begin(), intVect.begin() + intVect.size()/2, intVect.end());cout << "The median is " << intVect[intVect.size()/2] << endl;nth_element(intVect.begin(), intVect.begin() + 1, intVect.end(), greater<int>());cout << "The second largest is " << intVect[1] << endl;

之后在看看intVect的輸出:

123The median is 5The second largest is 79 7 6 5 3 1 0



查看完整回答
反對 回復(fù) 2021-05-31
  • 1 回答
  • 0 關(guān)注
  • 349 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號