链表函数模板始终失败,编译不过,请帮我看看到底是怎么了?
程序代码:/*
下面是cprimer 3rd 一道练习题:
练习 6.12 请写一个程序 使它接受下列定义
int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 };
list<int> ilist( ia, ia+11 );
用单个 iterator 形式的 erase()删除 ilist 中所有奇数位置的元素
//*/
#include <vector>
#include <list>
#include <iostream>
using namespace std;
void display(list<int>* plist )
{
list<int>:: iterator iter=plist->begin(),iter_end=plist->end();
cout << "plist:";
while(iter!=iter_end)
{
cout << (*iter) <<"、";
iter++;
}
cout << endl;
}
list<int> * test_6_12();
list<int> * test_6_12()
{
int ia[] = { 0, 1, 2, 3, 4, 5, 4, 7, 8, 9, 10 };
list < int > * ilist = new list< int >( ia,ia+11 );
typedef list<int>::iterator m_iter;
m_iter iter = ilist->begin();
m_iter itern = ilist->end();
cout << "before: ";
display(ilist);
vector<int> del_element;
for(int i= 0; i < 11; i++)
{
if ( i%2 == 1 )
del_element.push_back(*iter);
iter++;
}
for( int i=0; i<del_element.size(); i++)
{
m_iter iter;
iter = find(ilist->begin(), ilist->end(), del_element[i]);
if ( (iter) !=( ilist->end() ) )
ilist->erase(iter);
}
return ilist;
}
int main()
{
display( test_6_12() ) ;
return 0;
}
上面是cprimer 3rd 一道练习题: 练习 6.12 请写一个程序 使它接受下列定义
int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 };
list<int> ilist( ia, ia+11 );
用单个 iterator 形式的 erase()删除 ilist 中所有奇数位置的元素
//*/
在做题中,我未严格按list<int> ilist( ia, ia+11 ); 的要求,而是把它变成了一个指针。
两个问题:
一,为了找到奇数位置的元素,我试了多次,最终不得不选择了建立一个vector来存贮奇数位置的元素,感觉这样增大了开消。原因是,在用erase方法中,erase一个元素后,list的元素数量变化,会导致iter越界造成运行时错误。
请高手们点评一下,或者告诉我你们的好思路。
二,想让让display()函数能同时输出 list 和vector,我想把display()函数设计成一个模板,但试了几种方法都不行。请教高手帮忙给个例子。
下面的我的失败记录:
第一种错:
程序代码:template < class Elem_Type >
void display( Elem_Type* plist )
{
Elem_Type iterator iter=plist->begin(),iter_end=plist->end();
cout << "plist:";
while(iter!=iter_end)
{
cout << (*iter) <<"、";
iter++;
}
cout << endl;
}
第二种错:
程序代码:template < class A, class B >
void display(A<B>* plist )
{
A<B>:: iterator iter=plist->begin(),iter_end=plist->end();
cout << "plist:";
while(iter!=iter_end)
{
cout << (*iter) <<"、";
iter++;
}
cout << endl;
}
为什么都不行?我用单一元素都能成功。但一变成容器就失败。
请教朋友们给我帮助,谢谢。
[ 本帖最后由 laigaoat2005 于 2011-4-30 17:53 编辑 ]









