(C++) std::search

January 9, 2018 · View on GitHub

 

 

 

 

 

(C++) std::search

 

std::search is an STL algorithm for searching a sequence of elements in containers. It is similar to std::find, except that std::find searches for a single element.

 

 

 

 

 

Example

 

Assume you work with a std::vector of integers in which two sequences are forbidden: zero-zero and one-zero. With std::search these sequences can be used to find if our exemplary std::vector is valid.

 


#include <algorithm> #include <cassert> #include <vector> int main() {   std::vector<int> v;   v.push_back(0);   v.push_back(1);   v.push_back(0);   v.push_back(0);   v.push_back(2);   v.push_back(0);   //Two consequtive zeroes are forbidden   std::vector<int> f1;   f1.push_back(0);   f1.push_back(0);   //A one followed by a two is forbidden   std::vector<int> f2;   f2.push_back(1);   f2.push_back(2);   assert(std::search(v.begin(),v.end(),f1.begin(),f1.end())     != v.end()     && "Assume forbidden sequence 1 is detected");   assert(std::search(v.begin(),v.end(),f2.begin(),f2.end())     == v.end()     && "Assume forbidden sequence 2 is not present"); }

 

 

 

 

 

Example: SeperateString

 


#include <vector> #include <string> #include <cassert> #include <algorithm> //From http://www.richelbilderbeek.nl/CppSeperateString.htm const std::vector<std::string> SeperateString (   const std::string& input,   const std::string& seperator) {   std::vector<std::string> v;   typedef std::string::const_iterator Iterator;   const Iterator end = input.end();   Iterator i1 = input.begin();   {     //Copy until first comma     Iterator i2 = std::search(i1,end,seperator.begin(), seperator.end());     assert(i1!=i2);     std::string s;     std::copy(i1,i2, std::back_inserter(s));     v.push_back(s);     i1 = i2;   }   while (i1!=end)   {     //Copy from comma to (comma || end)     Iterator i2 = std::search(i1 + 1,end,seperator.begin(), seperator.end());     assert(i1!=i2);     assert(i2 == end || std::equal(seperator.begin(),seperator.end(),i2));     std::string s;     std::copy(i1+1,i2, std::back_inserter(s));     v.push_back(s);     i1 = i2;   }   return v; }