链表函数模板始终失败,编译不过,请帮我看看到底是怎么了?
程序代码:
/* 下面是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 编辑 ]