Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(加速C+;+;)管理内存章节 我正在经历加速C++,我被困在练习10.3中,我完全不知道如何开始。我想在这里提到,这不是作业练习,我只是为了获得对C++的信心。问题如下所示_C++ - Fatal编程技术网

(加速C+;+;)管理内存章节 我正在经历加速C++,我被困在练习10.3中,我完全不知道如何开始。我想在这里提到,这不是作业练习,我只是为了获得对C++的信心。问题如下所示

(加速C+;+;)管理内存章节 我正在经历加速C++,我被困在练习10.3中,我完全不知道如何开始。我想在这里提到,这不是作业练习,我只是为了获得对C++的信心。问题如下所示,c++,C++,重写§8.1.1/140中的中值函数,以便我们可以调用它 使用向量或内置数组。该函数应允许 任何算术类型的容器 上述问题的代码如下所示 template <class T> T median( vector<T> v) { typedef typename vector<T>::size_type vec_sz; vec_sz size = v.size(); if( size == 0 ) { th

重写§8.1.1/140中的中值函数,以便我们可以调用它 使用向量或内置数组。该函数应允许 任何算术类型的容器

上述问题的代码如下所示

template <class T>
 T median( vector<T> v)
 {
    typedef typename vector<T>::size_type vec_sz;
     vec_sz size = v.size();
     if( size == 0 )
     {
         throw domain_error(" median of an empty vector");
     }
     sort( v.begin(), v.end() );
     vec_sz mid = size /2;
     return size%2 == 0 ? ( v[mid]+v[mid+1])/2 : v[mid] ;
 }
模板
T中位数(向量v)
{
typedef typename vector::size_type vec_sz;
向量大小=v.大小();
如果(大小==0)
{
抛出域_错误(“空向量的中值”);
}
排序(v.begin(),v.end());
vec_sz mid=尺寸/2;
返回大小%2==0?(v[mid]+v[mid+1])/2:v[mid];
}
我不知道下一步该做什么。任何帮助或批评对我都是有益的。
感谢并问候

juanchopanza和Mooing Duck的评论以及迭代器提示可能是本书练习的正确方法。但是,在实际应用中,我可以编写一个接受数组的包装函数,并调用接受向量的原始函数:

template <class T, size_t N>
T median (const T (&a)[N])
{
    return median(std::vector<T>(a, a+N));
}
模板
T中位数(常数T&a)[N])
{
返回中位数(标准::向量(a,a+N));
}

juanchopanza和Mooing Duck的评论以及迭代器提示可能是本书练习的正确方法。但是,在实际应用中,我可以编写一个接受数组的包装函数,并调用接受向量的原始函数:

template <class T, size_t N>
T median (const T (&a)[N])
{
    return median(std::vector<T>(a, a+N));
}
模板
T中位数(常数T&a)[N])
{
返回中位数(标准::向量(a,a+N));
}

提示:标准库传递迭代器以指定要处理的范围。你可以做类似的事情。使用
std::begin
std::end
。如果我没有弄错的话,std::begin是C++11的一部分,我使用的是mac和GCC4.2,它不支持。。所以我想知道我是否可以使用其他方法?是的,你可以。由于数组的元素是连续的,因此可以传递指向第一个元素的指针,并通过最后一个元素的结尾进行一对一的传递。指针满足迭代器的许多要求。例如,见。虽然我建议您实现自己的
开始
结束
功能。谢谢juanchopanza,Mooing duck,我想通过你们提供的提示,我可以解决这个问题。我明天晚上试试看,因为这里已经很晚了。非常感谢您的快速回复。我有点害怕我可能会在这里得到很多负面的观点..提示:标准库传递迭代器来指定要处理的范围。你可以做类似的事情。使用
std::begin
std::end
。如果我没有弄错的话,std::begin是C++11的一部分,我使用的是mac和GCC4.2,它不支持。。所以我想知道我是否可以使用其他方法?是的,你可以。由于数组的元素是连续的,因此可以传递指向第一个元素的指针,并通过最后一个元素的结尾进行一对一的传递。指针满足迭代器的许多要求。例如,见。虽然我建议您实现自己的
开始
结束
功能。谢谢juanchopanza,Mooing duck,我想通过你们提供的提示,我可以解决这个问题。我明天晚上试试看,因为这里已经很晚了。非常感谢您的快速回复。我有点害怕我可能会在这里得到很多负面的观点。不过,这个练习需要一个可以同时用这两种方法调用的函数。@juanchopanza:我不反对这一点。对于函数重载,我的建议提供了一个可以同时被两个函数调用的函数名(而不是单个函数)。不过,这个练习需要一个可以同时被两个函数调用的函数。@juanchopanza:我不反对这一点。对于函数重载,我的建议是提供一个可以由两者调用的函数名(而不是单个函数)。