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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

list的merge()函數(shù)原型是什么樣的???或者這個程序該怎么改?

list的merge()函數(shù)原型是什么樣的???或者這個程序該怎么改?

C++
汪汪一只貓 2023-02-11 18:14:08
我寫了個Worker類,有姓名、年齡、薪金等數(shù)據(jù)成員。先用list管理該類的對象,建立兩個鏈表,每個鏈表存入3個Worker類的對象。在使用鏈表的merge算法將這兩個鏈表合并在一起時出錯。代碼如下:#include <iostream>#include <list>using namespace std;class Worker{char name[10]; int age; double salary;public:Worker(char *Name="noName",int Age=20,double Salary=2000){strncpy(name,Name,9);  age=Age;salary=Salary;}Worker(const Worker& w){strcpy(name,w.name);age=w.age;salary=w.salary;}void SetData(char *Name="noName",int Age=20,double Salary=2000){strncpy(name,Name,9);age=Age;salary=Salary;}void Display(){cout<<"員工:"<<name<<" ";cout<<"年齡:"<<age<<" ";cout<<"工資:"<<salary<<endl<<endl;}};void main(){//創(chuàng)建Worker對象Worker W1[3],W2[3];W1[1].SetData("員工11",30,3000); W1[0].SetData("員工10",30,3000); W1[2].SetData("員工12",30,3000);W2[1].SetData("員工21",30,3000); W2[0].SetData("員工20",30,3000); W2[2].SetData("員工22",30,3000);list<Worker> L1,L2;list<Worker>::iterator tor;//在鏈表中存入Worker對象for(int i=0; i<3; i++){L1.push_back(W1[i]);L2.push_back(W2[i]);}//迭代器輸出鏈表L1、L2各節(jié)點對象的數(shù)據(jù)成員cout<<"L1:"<<endl;for(tor=L1.begin(); tor!=L1.end(); tor++)tor->Display();cout<<"L2:"<<endl;for(tor=L2.begin(); tor!=L2.end(); tor++)tor->Display();//使用merge()成員函數(shù)合并L2到L1L1.merge(L2); //此處出錯?。。。?!cout<<"合并后的L1:"<<endl;for(tor=L1.begin(); tor!=L1.end(); tor++)tor->Display();}
查看完整描述

2 回答

?
幕布斯6054654

TA貢獻1876條經(jīng)驗 獲得超7個贊

STL中容器list的成員函數(shù)merge()

合并兩個有序的list, 
你調(diào)用前沒有sort()
先排序。
你應(yīng)該調(diào)用list的splice()函數(shù)

// list::merge
#include <iostream>
#include <list>

// compare only integral part:
bool mycomparison (double first, double second)
{ return ( int(first)<int(second) ); }

int main ()
{
std::list<double> first, second;

first.push_back (3.1);
first.push_back (2.2);
first.push_back (2.9);

second.push_back (3.7);
second.push_back (7.1);
second.push_back (1.4);

first.sort();
second.sort();

first.merge(second);

// (second is now empty)

second.push_back (2.1);

first.merge(second,mycomparison);

std::cout << "first contains:";
for (std::list<double>::iterator it=first.begin(); it!=first.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';

return 0;
}

Output:

first contains: 1.4 2.2 2.9 2.1 3.1 3.7 7.1

 


查看完整回答
反對 回復(fù) 2023-02-15
?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊

merge有兩個重載方式,只有一個形參的merge需要list的元素自定義了“小于”方法。兩個形參的merge還需要一個額外的可以進行“小于”比較的函數(shù)指針。
可以在Worker類加一個<符重載:
bool operator<(Worker &w)
{
if (age < w.age)
return true;
return false;
}
另外,你這個類設(shè)計得不太好,要盡量少地使用指針和數(shù)組。你可以用string類型代替char[]或者char *

查看完整回答
反對 回復(fù) 2023-02-15
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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