真的找不出到底哪里出错了。。。囧。。有空的帮小弟看下到底哪里错了,谢了

didijason 2010-11-07 03:16:49
#include<iostream>
#include<list>
using namespace std;

template<typename T>
void split(const list<T>& aList, list<T>& list1, list<T>& list2)
{


list<T>::iterator iter=aList.begin();
while(iter!=aList.end())
{
int i=1;

if(i%2==1)
list1.push_back(*iter);
else
list2.push_back(*iter);
aList.erase(iter++);
i++;
}

}

void main()
{
int arr[]={1,2,3,4,5,6};
int arrsize=sizeof(arr)/sizeof(int);
const list<int>aList(arr,arr+arrsize);
list<int>list1;
list<int>list2;
split(aList,list1,list2);
list<int>::iterator iter1=list1.begin();
list<int>::iterator iter2=list2.begin();
while(iter1!=list1.end())
{
cout<<*iter1<<endl;
list1.erase(iter1++);

}
while(iter2!=list2.end())
{
cout<<*iter2<<endl;
list2.erase(iter2++);
}


}
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jikeyuan1 2010-11-07
  • 打赏
  • 举报
回复
#include<iostream>
#include<list>
using namespace std;

template<typename T>
void split( list<T>& aList, list<T>& list1, list<T>& list2)
{
list<T>::iterator iter=aList.begin();
while(iter!=aList.end())
{
int i=1;

if(i%2==1)
list1.push_back(*iter);
else
list2.push_back(*iter);
aList.erase(iter++);
i++;
}
}
int main()
{
int arr[]={1,2,3,4,5,6};
int arrsize=sizeof(arr)/sizeof(int);
list<int>aList(arr,arr+arrsize);
list<int>list1;
list<int>list2;
split(aList,list1,list2);
list<int>::iterator iter1=list1.begin();
list<int>::iterator iter2=list2.begin();
while(iter1!=list1.end())
{
cout<<*iter1<<endl;
list1.erase(iter1++);
}
while(iter2!=list2.end())
{
cout<<*iter2<<endl;
list2.erase(iter2++);
}
return 0;
}

这涉及到const修饰符 和 迭代器的类型
const不能赋给非const
迭代器有很多种 看你如何选择啦
Yang99888 2010-11-07
  • 打赏
  • 举报
回复
1。把split函数中的int i=1;定义到while 循环体外。
2。void split(const list<T>& aList, list<T>& list1, list<T>& list2)和
const list<int>aList(arr,arr+arrsize);
中const注释掉
运行下就可以实现你要的功能了
华时纳 2010-11-07
  • 打赏
  • 举报
回复
你是要将list的元素以奇偶数分拆成两个list吗?还是将list的元素轮流放入两个list?,为此,请看下面两段代码哪个适用于你
//--------------------代码一
int i=1;
while(iter!=aList.end())
{
if(i%2==1)
{
list1.push_back(*iter);
}
else
{
list2.push_back(*iter);
}
aList.erase(iter++);
i++;
}

//--------------------代码二
while(iter!=aList.end())
{
if(*iter%2==1)
{
list1.push_back(*iter);
}
else
{
list2.push_back(*iter);
}
aList.erase(iter++);
}
ryfdizuo 2010-11-07
  • 打赏
  • 举报
回复
#include<iostream>
#include<list>
using namespace std;

template<typename T>
void split(/*const*/list<T>& aList, list<T>& list1, list<T>& list2)
{
typename list<T>::iterator iter=aList.begin();
while(iter!=aList.end())
{
int i=1;

if(i%2==1)
list1.push_back(*iter);
else
list2.push_back(*iter);
aList.erase(iter++); //要修改不能用const
i++;
}
}

void main()
{
int arr[]={1,2,3,4,5,6};
int arrsize=sizeof(arr)/sizeof(int);
/*const*/ list<int>aList(arr,arr+arrsize);
list<int>list1;
list<int>list2;
split(aList,list1,list2);
list<int>::iterator iter1=list1.begin();
list<int>::iterator iter2=list2.begin();
while(iter1!=list1.end())
{
cout<<*iter1<<endl;
list1.erase(iter1++);

}
while(iter2!=list2.end())
{
cout<<*iter2<<endl;
list2.erase(iter2++);
}
}
liwenji1986 2010-11-07
  • 打赏
  • 举报
回复
也可以用TDateTime类,通过一个double转换计算
gules 2010-11-07
  • 打赏
  • 举报
回复
int i=1; // 这个应该在while循环之外进行初始化吧?只需要一次。

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧