#include <iostream> #include <list> #include <cstddef> using namespace std;
void getItem(list<int>La,list<int>::size_type i, int n) { list<int>::size_type k = i+1; list<int>::iterator it = La.begin(); for (int j = 0;j<k;++j) { ++it; } n = *it; //cout<< n; }
void MergeList(list<int> La,list<int>Lb,list<int>Lc) { cout<<"nimabide"; list<int>::size_type i = 0,j = 0; int ai = 0,bi = 0;cout<<bi; list<int>::size_type La_Len = La.size(); list<int>::size_type Lb_Len = Lb.size();
while ((i<=La_Len)&&(j<=Lb_Len)) { getItem(La,i,ai); getItem(Lb,j,bi); if (ai<bi) { Lc.push_back(ai); i++; } else { Lc.push_back(bi); j++; } }
while (i<=La_Len) { getItem(La, i, ai); Lc.push_back(ai); } while (j<=Lb_Len) { getItem(Lb, j, bi); Lc.push_back(bi); } }
for (list<int>::iterator it = listC.begin(); it != listC.end(); ++it) { cout << *it << " "; }
return 0; }
list不能那样初始化吧,我改了代码可以运行,改动的部分在代码中表示出来了
可以 c++11的新语法 [解决办法]
void getItem(list<int>La,list<int>::size_type i, int n)// {//此函数逻辑混乱,一个很明显会出错的case是当i为0的时候,你取的不是第一个值!!! list<int>::size_type k = i+1;//不应该给i加一!!!!! list<int>::iterator it = La.begin(); for (int j = 0;j<k;++j) { ++it; } n = *it;//赋值给形参,但是此处n是值传递,估计楼主笔误了,形参n应该声明为int& n //cout<< n; }
void MergeList(list<int> La,list<int>Lb,list<int>Lc)//这里的形参Lc跟上面的形参n的道理是一样的 { cout<<"nimabide";//…… list<int>::size_type i = 0,j = 0; int ai = 0,bi = 0;cout<<bi; list<int>::size_type La_Len = La.size(); list<int>::size_type Lb_Len = Lb.size();
while ((i<=La_Len)&&(j<=Lb_Len))//这里不应该是小于等于,楼主对于循环边界的把握多练练基本功 { getItem(La,i,ai); getItem(Lb,j,bi); if (ai<bi) { Lc.push_back(ai); i++; } else {
Lc.push_back(bi); j++; } }
while (i<=La_Len)//应该是小于 {//这里可能会陷入死循环 getItem(La, i, ai); Lc.push_back(ai);//应该增加一行i++ } while (j<=Lb_Len)//应该是小于 {//这里可能会陷入死循环 getItem(Lb, j, bi); Lc.push_back(bi);//应该增加一行j++ } }
//最后楼主对于在Lc增加元素采用push_back的方法很挫!!!!! [解决办法]
#include <iostream> #include <list> #include <cstddef> using namespace std;
void getItem(list<int> La, list<int>::size_type i, unsigned int &n) { list<int>::iterator it = La.begin(); for (int j = 0; j < i; ++j) { // 改动 ++it; } n = *it; //cout<< n; }
void MergeList(list<int> &La,list<int> &Lb,list<int> &Lc) // 改动 { cout << "nimabide" << endl; list<int>::size_type i = 0,j = 0; unsigned int ai = 0, bi = 0; cout<<bi; list<int>::size_type La_Len = La.size(); list<int>::size_type Lb_Len = Lb.size();
while ( (i < La_Len) && (j < Lb_Len) ) // 改动 { getItem(La, i, ai); getItem(Lb, j, bi); if (ai<bi) { Lc.push_back(ai);
i++; } else { Lc.push_back(bi); j++; } }
while (i < La_Len) // 改动 { getItem(La, i, ai); Lc.push_back(ai); i++;// 改动 } while (j < Lb_Len) // 改动 { getItem(Lb, j, bi); Lc.push_back(bi); j++;// 改动 } }