#include <iostream>
#include <list>
#include <algorithm>using namespace std;double median( const list<double>& array )
{
   sort (array.begin(), array.end());
   int number=array.size();
   double middle;
   
   if(number%2==0)
   {
   list<double>::iterator iter=array.begin();
   int n=number/2;
   for(int i=0; i<n; i++)
   iter++;
   double t1=*iter;
   iter++;
   double t2=*iter;
    middle=(t1+t2)/2;
   }   else
   {
   list<double>::iterator iter=array.begin();
   int n=number/2;
   for(int i=0; i<n; i++)
   iter++;
   middle=*iter;
   }   return middle;
}
main()
{
list<double> a;
a.push_back(1.1);
a.push_back(1.3);
a.push_back(3.4);
a.push_back(4.6);
a.push_back(5.2);
a.push_back(6.0);
a.push_back(6.9);

 median(a);}

解决方案 »

  1.   

    if(number%2==0)
      {
    list<double>::iterator iter=array.begin();
    int n=number/2;
    //多循坏了一次,这时iter = array.begin();
    for(int i=0; i<n - 1; i++) 
    iter++;  // i = 0, iter = array.begin + 1;
    double t1=*iter;
    iter++;
    double t2=*iter;
    middle=(t1+t2)/2;
      }
      

  2.   

    为什么不用vector啊,里面有at函数,简单好用,根本不需要用循环来写
      

  3.   

     error C2440: 'initializing' : cannot convert from 'class std::list<double,class std::allocator<double> >::const_iterator' to 'class std::list<double,class std::allocator<double> >::iterator'
            编译有错误,请问怎么解决啊?找了半天也不知道为什么
      

  4.   

    // 类型无法转换,右值是const_iterator, 左值是iterator
    list<double>::const_iterator iter=array.begin();