【发布时间】:2019-07-26 06:31:50
【问题描述】:
此代码用于查找两个排序列表的交集和并集。排序后的列表继承自具有所有基本功能的列表类。主要问题是函数的返回类型是什么。 它是指向列表的指针还是列表本身?我将如何显示该“指针”的内容。
template <typename Object>
class sorted_list : public List<Object>{
friend sorted_list<Object>*& slUnion( const sorted_list<Object>& list1, const sorted_list<Object> & list2){
auto i=list1.begin();
auto j=list2.begin();
sorted_list<Object> un;
static sorted_list<Object>* newlist=&un;
while(i!=list1.end() && j!=list2.end()){
if(*i<*j){
un.push_back(*i);
i++;
}
else if(*i>*j){
un.push_back(*j);
j++;
}
else{ //if equal
un.push_back(*i);
i++; j++;
}
}
while(i!=list1.end())
un.push_back(*i++);
while(j!=list2.end())
un.push_back(*j++);
return newlist;
}
};
程序运行时,main中的“un”指向NULL。
int main(){
sorted_list<int> l1;
int i=1;
while(i<10){
l1.push_back(i++);
}
sorted_list<int>l2;
int j=1;
while(j<10){
l2.push_back(j);
j+=2;
}
sorted_list<int> *un = slUnion(l1,l2);
}
【问题讨论】:
-
注意:
static sorted_list<Object>* newlist=&un;不会在函数退出后将un保持在作用域内并保持活动状态。你不想处理undead,所以考虑按值返回。 RVO 可能会降低成本,但如果没有,它仍然是比返回本地更好的选择。