c++数据结构题,急急急急急急啊。。。。在线等。
练习使用STL模板,用STL中的list对象设计如下一个函数删除链表中的所有重复元素并进行验证。...
练习使用STL模板,用STL中的list对象设计如下一个函数删除链表中的所有重复元素并进行验证。
展开
展开全部
#include <list>
#include <iostream>
template <class T>
std::ostream & operator<<(std::ostream & out,const std::list<T> & alist)
{
for(auto iter = alist.begin();iter!=alist.end();++iter)
out<<*iter<<" ";
return out;
}
void delduplicate(std::list<int> &listInt)
{
listInt.sort();
for(auto iter=listInt.begin();iter!=listInt.end();)
{
auto iterTmp=iter++;
if(iter==listInt.end())
break;
if(*iterTmp==*iter)
{
listInt.erase(iterTmp);
}
}
}
void main()
{
std::list<int> listInt;
listInt.push_back(1);
listInt.push_back(1);
listInt.push_back(1);
listInt.push_back(1);
listInt.push_back(2);
listInt.push_back(1);
listInt.push_back(3);
listInt.push_back(4);
listInt.push_back(3);
listInt.push_back(4);
listInt.push_back(5);
listInt.push_back(4);
listInt.push_back(5);
std::cout<<"list为:"<<listInt<<std::endl;
delduplicate(listInt);
std::cout<<"去重后的list为:"<<listInt<<std::endl;
}
更多追问追答
追问
可以改成不用模板的形式吗?拜托啦~ 可以在再加一下注释吗 看不太懂
追答
#include <list>
#include <iostream>
void delduplicate(std::list<int> &listInt)//list去重函数
{
if(listInt.empty())
return;
listInt.sort();
std::list<int>::iterator iter=listInt.begin();
while(true)
{
std::list<int>::iterator iterTmp=iter++;//记录相邻的两个元素的前一个元素到iterTmp
if(iter==listInt.end()) //如果相邻的两个元素的后一个元素是链表的结尾,则退出
break;
if(*iterTmp==*iter) //如果相邻的两个元素相等,则删除前一个
{
listInt.erase(iterTmp);
}
}
}
void main()
{
std::list<int> listInt;
listInt.push_back(1); //链表尾插入一个元素
listInt.push_back(1);
listInt.push_back(1);
std::cout<<"去重之前的list为:";
std::list<int>::iterator iter;
for(iter=listInt.begin();iter!=listInt.end();++iter)//打印去重前的list
{
std::cout<<*iter<<" ";
}
std::cout<<std::endl;//换行
delduplicate(listInt);//list去重
std::cout<<"去重后的list为:";
for(iter=listInt.begin();iter!=listInt.end();++iter)//打印去重后的list
{
std::cout<<*iter<<" ";
}
std::cout<<std::endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询