4

C++ の標準ライブラリのベクトルクラスに関して 2 つの質問があります。

  1. 値 (整数としましょう) がベクトルに既に存在するかどうかを確認するにはどうすればよいですか?

    私が言いたいことは次のとおりです。

  2. ベクトル内のすべての要素に引数を保持する関数を適用するにはどうすればよいですか? (for_eachではそれができないようです)

    つまり、「ベクトル内の z 要素ごとに MyAddFn(i,j) を適用する」

...または、stl ベクトル シーケンス コンテナーで正しい軌道に乗っていない可能性があります。独自の反復子を定義する必要がありますか?

4

3 に答える 3

10

1)

std::find(v.begin(), v.end(), 5) == v.end() // checks that vector<int> v has no value 5.

2) たとえば、新しい C++11 std::bind を使用しますが、実際のアドバイスを得るには、MyAddFn を使用するコンテキストがさらに必要です。

于 2012-07-14T13:43:36.160 に答える
2

1 の場合、std::findアルゴリズムを使用します。要素が存在しない場合は、イテレータを最後まで返します。その場合は、要素を追加してください。

于 2012-07-14T13:41:57.317 に答える
1

2番目の質問。関数の代わりにオブジェクトを使用できます。

#include <vector>
#include <algorithm>

class apply_me
{
  int multiplicator_;
  public:
  apply_me(const int multiplicator) : multiplicator_(multiplicator)
  {};
  int operator ()(const int element) const
  {
    return element*multiplicator_;
  };
};
int main()
{
  std::vector<int> v;
  std::transform(v.begin(), v.end(),v.begin(), apply_me(3));
}
于 2012-07-14T14:15:13.547 に答える