1

私は高速化された C++ を使用していますが、演習 10.3 で行き詰まっており、文字通り開始方法さえわかりません。ここで、これは宿題ではなく、C++ に自信を持てるように読んでいることをお伝えしたいと思います。質問を以下に示します。

ベクトルまたは組み込み配列で呼び出すことができるように、§8.1.1/140 の median 関数を書き直します。この関数は、あらゆる算術型のコンテナーを許可する必要があります。

上記の質問のコードを以下に示します

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] ;
 }

次に何をすればよいかわかりません。どんな助けや批判も私にとって有益です。感謝と敬意

4

1 に答える 1

1

juanchopanza と Mooing Duck からのイテレータに関するヒント付きのコメントは、おそらく本の練習問題に適したアプローチです。ただし、実際のアプリケーションでは、代わりに配列を受け入れるラッパー関数を記述し、ベクトルを受け入れる元の関数を呼び出すことができます。

template <class T, size_t N>
T median (const T (&a)[N])
{
    return median(std::vector<T>(a, a+N));
}
于 2013-02-20T00:38:48.390 に答える