2016-09-12 8 views
-3

が(この順序で)パラメータとして以下に取るのfindと呼ばれる機能を実装します この関数は、配列内で指定された要素を調べ、要素のインデックス位置を返す必要があります。要素が存在しない場合、関数は-1を返します。を鋳型リニア検索

私が持っているコードは次のとおりです。

template<typename t> 
t find(t objectInArray, t *array, int arraySize) 
{ 
    array = new t[arraySize]; 

    for(int index = 0; index < arraySize; index++){ 
     if(array[index] == objectInArray){ 
     cout << index; 
     return index; 
     } 
    } 
    return -1; 
} 

私はテンプレートなしで、メイン使ってint型にこのコードを実行し、それが完璧に動作します。私は実際に自分のコードに何が間違っているのか困惑しています。

+0

[mcve]を投稿してください。また、1)なぜあなたは '-1'を返すのですか?探しているタイプが 'std :: string'の場合はどうなりますか?その '-1'の戻り値はコンパイルされません。 2)なぜnew []を使っているのですか? – PaulMcKenzie

+0

追加するには、[std :: find](http://en.cppreference.com/w/cpp/algorithm/find)が既にこれを行います。 – PaulMcKenzie

+0

関数 't'の戻り値の型を' int'に変更しました。オブジェクトが配列内にある場合はインデックスを返すと仮定します。そうでない場合は、オブジェクトが配列内にない場合は-1を返すと仮定します。 – hicu0

答えて

1

ポインタを再割り当てしないでください。この行を削除します。

array = new t[arraySize]; 

返すものはインデックスです。戻り値の型はtであってはなりません。整数型を返します。


サイドノート:

あなたはおそらくnew式を使用して動的配列を作成するためにあなたの教師やあなたの本で語られています。あなたはあなたの主な機能に1つ書いているかもしれません。学生は通常選択肢がありませんが、メモリリークの危険性のためにコミュニティの一般的なアドバイスに反することを指摘しなければなりません。 newを使用する必要がある場合は、対応するdeleteを忘れずに入力してください。

+0

'new'の呼び出しは、OPコードのメモリリークです。それはまったく行われるべきではありません。 – PaulMcKenzie

+0

@PaulMcKenzie私はそれがうまくいくアドレッシングを追加すると思います。 –

+0

'array = new t [arraySize];行を取り出したら、どのようにforループを使って配列のすべての要素を調べることができますか? – hicu0