(C++) Replace\_range

February 24, 2017 · View on GitHub

 

 

 

 

 

(C++) Replace_range

 

Replace code snippet that replaces a range by another range.

 


#include <cassert> #include <vector> const std::vector<int> Replace_range(   const std::vector<int>& v,   const std::vector<int>& oldvalue,   const std::vector<int>& newvalue) {   assert(v.size() >= oldvalue.size() && "oldvalue must have less elements than v");   std::vector<int> w;   std::vector<int>::const_iterator from = v.begin();   std::vector<int>::const_iterator to = from + oldvalue.size();   const std::vector<int>::const_iterator end = v.end();   assert(to < v.end());   for (; to != end; ++from, ++to)   {     if (std::equal(from,to,oldvalue.begin()))     {       std::copy(newvalue.begin(),newvalue.end(),std::back_inserter(w));       from += oldvalue.size();       to += oldvalue.size();     }     else     {       w.push_back(*from);     }   }   std::copy(from,end,std::back_inserter(w));   return w; }

 

 

 

 

 

Replace_range test

 


#include <algorithm #include <iostream> #include <iterator> int main() {   std::vector<int> v;   v.push_back(1);   v.push_back(2);   v.push_back(3);   v.push_back(4);   v.push_back(5);   v.push_back(6);   v.push_back(7);   v.push_back(8);   v.push_back(9);   std::vector<int> from;   from.push_back(2);   from.push_back(3);   from.push_back(4);   std::vector<int> to;   to.push_back(1);   to.push_back(2);   to.push_back(3);   to.push_back(4);   to.push_back(5);   //Write v to screen   //From http://www.richelbilderbeek.nl/CppCoutContainer.htm   std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout," "));   std::cout << std::endl;   for (int i = 0; i!=10; ++i)   {     v = Replace_range(v,from,to);     //Write v to screen     //From http://www.richelbilderbeek.nl/CppCoutContainer.htm     std::copy(v.begin(),v.end(),       std::ostream_iterator<int>(std::cout," "));     std::cout << std::endl;   } }