如果列表是空的,我该如何处理这种情况?我希望程序打印"不可能在空列表中找到最大值",但必须返回值...
template<typename T>
T max(const std::list<T>&l){
std::list <T> l1=l;
auto largest=l1.begin();
for(auto it=begin(l1);it!=end(l1);++it){
++largest;
if((*it)>(*largest)){
largest=it;
}
}
return *largest;
}
我试着加上
template<typename T>
T max(const std::list<T>&l){
if(l.empty()){
std::cout<<"List is empty! "<<std::endl;
}
else{
std::list <T> l1=l;
auto largest=l1.begin();
for(auto it=begin(l1);it!=end(l1);++it){
++largest;
if((*it)>(*largest)){
largest=it;
}
}
return *largest;
}
}
在主. ccp文件中,要求输入元素类型double,因此,例如,如果我们输入'b',程序应该打印"List is empty!",并且应该只将输入的double放入容器中
1条答案
按热度按时间nlejzf6q1#
解决这个问题的传统方法是不返回元素的副本,而是返回元素的迭代器。在空范围的情况下,可以返回范围末尾的迭代器。这是标准库
std::max_element
和std::ranges::max_element
处理这种情况的方法。另一种方法是将返回类型 Package 在
std::optional
中,并在输入范围为空时返回std::nullopt
。另一种方法是将空输入范围的情况视为调用方的一个错误。在C++中有许多方法可以处理错误情况:
std::ranges::max
处理(或者说,不处理)这种情况的方式。std::expected
。注意,正如我在上面提到的例子,标准库已经提供了用于查找最大元素的函数模板,因此编写所描述的函数是相当不必要的。