0

私は C++ が初めてで、これを行う方法がわかりません。テンプレートを勉強しようとしています。

これが私の現在のコードです。コンテナーを送信し (受信する型は指定されていません)、コンテナー内にあるイテレーターと共に整数が渡された場合は true を返します。表示されない場合は false。

#include <iostream>
#include <vector>
#include <list>

template <typename Iter>
bool function(Iter first, Iter last, const int x)
{
  for (auto it = first; it!=last; ++it)
  {
    if (*it == x)
    {
      return true;
    }
  }
return false;
}

int main()
{
  std::vector<int> vec = {1,2,5,10,11}; 
  std::list<int> lis = {1,1,5,9,55};

  auto first = vec.begin(), last = vec.end();
  auto first2 = lis.begin(), last2 = lis.end();

  std::cout<<function(first, last, 11);
  std::cout<<function(first, last, 9)<<std::endl;

  std::cout<<function(first2, last2, 6);
  std::cout<<function(first2, last2, 55)<<std::endl;

return 0;
}

この関数を変更して、bool を返す代わりに、最初に一致したイテレータを返すようにしたいと思います。どうすればこれを行うことができますか?誰かが私を正しい方向に押し進めることができれば、本当に助かります。

4

1 に答える 1

3

答えを教えずに正しい方向に導く方法が本当にわかりません。とても単純なことだからです。

template <typename Iter>
Iter // change 1
function(Iter first, Iter last, const int x)
{
  for (auto it = first; it!=last; ++it)
  {
    if (*it == x)
    {
      return it; // change 2
    }
  }
  return last; // change 3
}

ちなみに、これはまさにそれstd::findです。

于 2013-06-04T00:46:00.537 に答える