这个程序有问题
我在学习C++的时候(用的Accelerated c++)遇到一个问题,下面这个程序无法通过编译,我感觉语法上没什么问题.主要是编译器的报错让我无法理解,它说出错的源代码是://///////// template <typename _RandomAccessIterator>
void
__final_insertion_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last)
{
if (__last - __first > _S_threshold)
{
std::__insertion_sort(__first, __first + _S_threshold);
std::__unguarded_insertion_sort(__first + _S_threshold, __last);
}
else
std::__insertion_sort(__first, __last);
} ////////////////////
这一段根本就不是我写的.它自己库中的.(我不太清楚是不是库里的)
我用的是Dev-C++的编译器.
请各位师兄帮我看看是什么问题.谢谢.
以下是那个程序的源代码:
大体上是对学生的成绩进行计算和统计.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using std::cin;
using std::cout;
using std::vector;
using std::endl;
using std::string;
using std::sort;
int n, m, i, j;
struct Student_info
{
string name;
double midterm, final;
vector <double> homework;
};
struct Student_ans
{
string name;
double grade;
};
bool compare( const Student_ans& x, const Student_ans& y )
{
return x.name < y.name;
}
void account( const Student_info& students, Student_ans& results )
{
sort( students.homework.begin(), students.homework.end() );
if( n % 2 == 0 )
{
results.grade = students.midterm * 0.3 + students.final * 0.3 + ( students.homework[n/2] + students.homework[n/2 +1]) *0.4;
}
else
{
results.grade = students.midterm *0.3 + students.final * 0.3 + students.homework[n/2 + 1] * 0.4;
}
results.name = students.name;
}
int main()
{
int k;
vector <Student_info> students;
vector <Student_ans> results;
vector <Student_ans> failures;
//输入
cout < < "请输入家庭作业的次数: " < < endl;
cin > > n;
cout < < "请输入学生的人数: " < < endl;
cin > > m;
for( i = 0; i < m; i++ )
{
cout < < "请输入学生姓名: " < < endl;
cin > > students[i].name;
cout < < "请输入期中考试成绩: " < < endl;
cin > > students[i].midterm;
cout < < "请输入期末考试成绩: " < < endl;
cin > > students[i].final;
cout < < "请输入每次的家庭作业成绩: " < < endl;
for( j = 0; j < n; j++ )
{
cout < < "请输入第 " < < j+1 < < "次家庭作业的成绩 " < < endl;
cin > > students[i].homework[j];
}
}
//计算
for( i = 0; i < m; i++ )
{
account( students[i], results[i] );
}
//排序
sort( results.begin(), results.end(), compare );
//抽取不及格的人的成绩
j = 0;
for( i = 0; i < m; i++ )
{
if( results[i].grade < 60 )
{
failures[j].grade = results[i].grade;
failures[j].name = results[i].name;
j++;
}
}
n = j;
//打印输出
cout < < "打印全部学生的成绩请按 1 " < < endl;
cout < < "打印不及格学生的成绩按 2 " < < endl;
cin > > k;
if( k == 1 )
{
for( i = 0; i < m; i++ )
{
cout < < results[i].name < < " " < < results[i].grade < < endl;
}
cout < < "Done ! ";
}
else if( k == 2 )
{
for( i = 0; i < n; i++ )
{
cout < < failures[i].name < < " " < < failures[i].grade < < endl;
}
cout < < "Done ! ";
}
else
{
cout < < "无效输入,请重新输入。 " < < endl;
}
}
[解决办法]
sort( students.homework.begin(), students.homework.end() );
不正确
[解决办法]
恩,少个参数
[解决办法]
void account( const Student_info& students, Student_ans& results )
{
sort( students.homework.begin(), students.homework.end() );
.....
-------------------------------------------------------
students是const 的,要想sort,要去掉const