3.28.2013

C++: Testing If This Sequence Contains That Sequence

C++: シーケンスが別のシーケンスを含んでいるかテストする

<algorithm> std::search の簡単なラッパー。
主な用途は string と vector。

#include <iostream>
#include <vector>
#include <algorithm>

template <typename T>
bool contains(T const& a, T const& b){return std::search(a.begin(),a.end(),b.begin(),b.end())!=a.end();}

using namespace std;

int main(int argc, char **argv) {
  cout << contains(string("abcdefg"), string("efg")) << endl;  // true
  cout << contains(string("abcdefg"), string("efh")) << endl;  // false
  cout << contains(string("abcdefg"), string("")) << endl;  // true
  cout << contains(string(""), string("efg")) << endl;  // false
  cout << contains(string("efg"), string("efg")) << endl;  // true
  cout << contains(string(""), string("")) << endl;  // false

  int x[] = { 1, 2, 3, 4, 5 };
  int y[] = { 1, 2 };
  int z[] = { 1, 2, 5 };
  vector<vector<int> > seq;
  seq.push_back(vector<int>(x, x + sizeof(x) / sizeof(x[0])));
  seq.push_back(vector<int>(y, y + sizeof(y) / sizeof(y[0])));
  seq.push_back(vector<int>(z, z + sizeof(z) / sizeof(z[0])));

  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 3; ++j) {
      cout << contains(seq[i], seq[j]) << " ";
    }
    cout << endl;
  }
  // true  true false
  // false true false
  // false true true
}

0 件のコメント:

コメントを投稿