【发布时间】:2013-02-20 00:06:37
【问题描述】:
我正在经历加速的 C++,我被困在练习 10.3 中,我什至不知道如何开始。我想在这里提一下,这不是家庭作业,我阅读它只是为了获得对 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 )
{
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] ;
}
我不知道下一步该做什么。任何帮助或批评都会对我有益。 谢谢和问候
【问题讨论】:
-
提示:标准库传递迭代器来指定要处理的范围。你可以做类似的事情。
-
使用
std::begin和std::end。 -
如果我没记错,std::begin 是 C++11 的一部分,我正在使用带有 gcc 4.2 的 mac 并且它不支持 .. 所以我想知道我是否可以使用其他方法?
-
是的,你可以。由于数组的元素是连续的,您可以传递一个指向第一个元素的指针,并且一对一地传递到最后一个元素的末尾。指针满足迭代器的许多要求。例如,请参阅here。虽然我建议您实现自己的
begin和end函数。 -
谢谢juanchopanza,哞鸭,我想有了你们提供的提示,我想我能解决这个问题。明天晚上会试一试,因为这里已经很晚了。非常感谢您的快速回复。我有点害怕我可能会在这里得到很多负面评价..
标签: c++