欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ std::list的merge()使用方式與分析

 更新時(shí)間:2024年04月23日 10:35:00   作者:Jane_Yih  
這篇文章主要介紹了C++ std::list的merge()使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

看到《C++標(biāo)準(zhǔn)庫(kù)第2版》對(duì)list::merge()的相關(guān)介紹,令我有點(diǎn)迷糊,特意敲代碼驗(yàn)了一下不同情況的調(diào)用結(jié)果。

《C++標(biāo)準(zhǔn)庫(kù)第2版》對(duì)list::merge()的相關(guān)介紹

list::merge()定義

merge()的作用就是將兩個(gè)list合并在一起,函數(shù)有2個(gè)版本:

c1.merge(c2)------------->這個(gè)版本含糊,將c2合入c1中,但合并后元素是怎么排序的呢?下文主要分析這個(gè)版本的不同調(diào)用結(jié)果

c1.merge(c2, op)--------->這個(gè)版本比較簡(jiǎn)單,就是將c2的內(nèi)容合入到c1中,然后按op()排序

c1.merge(c2)調(diào)用情況分析

前提:有兩個(gè)list,內(nèi)容分別如下:

情況一:c1默認(rèn)排序,c2不排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(); //默認(rèn)升序排序
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后沒(méi)有按c1的默認(rèn)升序排序

情況二:c1不排序,c2默認(rèn)排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c2.sort(); //默認(rèn)升序排序
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后沒(méi)有按c2的默認(rèn)升序排序

情況三:c1默認(rèn)排序,c2默認(rèn)排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(); //默認(rèn)升序排序
	c2.sort(); //默認(rèn)升序排序
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后也能按默認(rèn)升序排序

情況四:c1默認(rèn)排序,將c1賦值給c2,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(); //默認(rèn)升序排序
	c2 = c1;
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:可以看到,c1賦值給c2,使得c2也具有了與c1一樣的默認(rèn)排序,兩者合并后,仍能按默認(rèn)升序排序,結(jié)果與情況三結(jié)果相似。

下面使用自定義的降序規(guī)則(op())來(lái)排序

    //降序比較
	auto op = [](int first, int second) {
		return first > second;
	};

情況五:c1自定義降序排序,c2不排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(op);
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后沒(méi)有按c1的自定義降序排序,與情況一相似

情況六:c1不排序,c2自定義降序排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c2.sort(op);
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后沒(méi)有按c2的自定義降序排序,與情況二相似

情況七:c1自定義降序排序,c2自定義降序排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(op);
	c2.sort(op);
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后,其結(jié)果僅僅是將c2放到了c1的末端,c1段、c2段數(shù)據(jù)仍是合并前的順序,這與情況三有差異

情況八:c1自定義降序排序,c2默認(rèn)排序,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(op);
	c2.sort();
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

結(jié)果:合并后,沒(méi)有按c1的自定義降序排序,也沒(méi)有按c2的默認(rèn)排序,與情況二相似

情況九:c1自定義降序排序,將c1賦值給c2,c2合入c1中

	list<int> c1{ 0,1,2,88,3,4 };
	list<int> c2{ 10,11,99,13,14,15 };
	cout << "-----------原始數(shù)據(jù)-----------" << endl;
	myPrinter(c1, c2);
 
	cout << "-----------排序后數(shù)據(jù)-----------" << endl;
	c1.sort(op);
	c2 = c1;
	myPrinter(c1, c2);
 
	cout << "-----------合并后數(shù)據(jù)-----------" << endl;
	c1.merge(c2);
	myPrinter(c1, c2);

 

結(jié)果:合并后,其結(jié)果僅僅是將c2放到了c1的末端,c1段、c2段數(shù)據(jù)仍是合并前的順序,這與情況七相同,但與情況三有差異

結(jié)論

因?yàn)楹喜⒑蟮捻樞蚯闆r多變,所以如果希望合并后結(jié)果按某種規(guī)則排序,建議使用c1.merge(c2, op),指明合并后的排序規(guī)則。

當(dāng)然,如果c1,c2都是默認(rèn)排序,則可以直接使用c1.merge(c2),即上文提到的情況三。

附:示例的輔助函數(shù)

template <class T>
void printfList(const T& _Container, const char* _Delim)
{
	std::copy(_Container.cbegin(), _Container.cend(), std::ostream_iterator<T::value_type>(cout, _Delim));
	cout << endl;
}
 
void myPrinter(const list<int>& c1, const list<int>& c2)
{
	cout << "c1:";
	printfList(c1, " ");
	cout << "c2:";
	printfList(c2, " ");
	cout << "----------------------" << endl << endl;
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言結(jié)構(gòu)體的一些理解

    C語(yǔ)言結(jié)構(gòu)體的一些理解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體的一些理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++重載運(yùn)算符的規(guī)則詳解

    C++重載運(yùn)算符的規(guī)則詳解

    運(yùn)算符重載函數(shù)可以是類的成員函數(shù),也可以是類的友元函數(shù),還可以是既非類的成員函數(shù)也不是友元函數(shù)的普通函數(shù)
    2013-10-10
  • C語(yǔ)言數(shù)組按協(xié)議存儲(chǔ)與按協(xié)議解析數(shù)據(jù)的實(shí)現(xiàn)

    C語(yǔ)言數(shù)組按協(xié)議存儲(chǔ)與按協(xié)議解析數(shù)據(jù)的實(shí)現(xiàn)

    今天小編就為大家分享一篇關(guān)于C語(yǔ)言數(shù)組按協(xié)議存儲(chǔ)與按協(xié)議解析數(shù)據(jù)的實(shí)現(xiàn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C++中指針函數(shù)與函數(shù)指針的使用

    C++中指針函數(shù)與函數(shù)指針的使用

    今天小編就為大家分享一篇關(guān)于C++中指針函數(shù)與函數(shù)指針的使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C語(yǔ)言中函數(shù)返回字符串的方法匯總

    C語(yǔ)言中函數(shù)返回字符串的方法匯總

    C語(yǔ)言返回字符串函數(shù)共有四種方式,分別如下:使用堆空間,返回申請(qǐng)的堆地址,注意釋放、函數(shù)參數(shù)傳遞指針,返回該指針、返回函數(shù)內(nèi)定義的靜態(tài)變量(共享)、返回全局變量
    2017-05-05
  • 深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理及區(qū)別介紹

    深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理及區(qū)別介紹

    這篇文章主要介紹了深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • C++ const引用、臨時(shí)變量 引用參數(shù)詳解

    C++ const引用、臨時(shí)變量 引用參數(shù)詳解

    下面小編就為大家?guī)?lái)一篇C++ const引用、臨時(shí)變量 引用參數(shù)詳解。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C++獲取本機(jī)登陸過(guò)的QQ號(hào)碼示例程序

    C++獲取本機(jī)登陸過(guò)的QQ號(hào)碼示例程序

    這篇文章主要介紹了使用C++獲取本機(jī)登陸過(guò)的QQ號(hào)碼列表的程序示例,大家可以參考使用
    2013-11-11
  • C++數(shù)據(jù)結(jié)構(gòu)與算法之反轉(zhuǎn)鏈表的方法詳解

    C++數(shù)據(jù)結(jié)構(gòu)與算法之反轉(zhuǎn)鏈表的方法詳解

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)與算法之反轉(zhuǎn)鏈表的方法,結(jié)合實(shí)例形式分析了C++反轉(zhuǎn)鏈表的原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法

    C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法

    這篇文章主要為大家詳細(xì)介紹了C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論