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 件のコメント:
コメントを投稿