这是Accelerated C++第四章median.cpp的源代码
// source file for the `median ' function
#include <algorithm> // to get the declaration of `sort '
#include <stdexcept> // to get the declaration of `domain_error '
#include <vector> // to get the declaration of `vector '
using std::domain_error; using std::sort; using std::vector;
#include "median.h "
// compute the median of a `vector <double> '
// note that calling this function copies the entire argument `vector '
double median(vector <double> vec)
{
#ifdef _MSC_VER
typedef std::vector <double> ::size_type vec_sz;
#else
typedef vector <double> ::size_type vec_sz;
#endif
vec_sz size = vec.size();
if (size == 0)
throw domain_error( "median of an empty vector ");
sort(vec.begin(), vec.end());
vec_sz mid = size/2;
return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
}
请问一下这段代码是什么意思?有什么用?
#ifdef _MSC_VER
typedef std::vector <double> ::size_type vec_sz;
#else
typedef vector <double> ::size_type vec_sz;
#endif
------解决方案--------------------
#ifdef 是预编译宏,在编译期就存在。
下面那段代码则是如果定义了_MSC_VER,就使用typedfe定义一个别名,这个别名使用注明名字空间的语法定义一个vector大小的类型。通常是因为没有引入std标准库或者内部已有vector类型,为了加以区别使用哪个vector的原因。