#include #include using namespace std; using namespace blaze; void ror(auto &vec) { vec = elements(vec, [size=vec.size()](size_t i){ return (i-1) % size; }, vec.size()); } void rol(auto &vec) { vec = elements(vec, [size=vec.size()](size_t i){ return (i+1) % size; }, vec.size()); } void insert_left(auto &vec, auto const &x) { ror(vec); vec[0] = x; } void insert_right(auto &vec, auto const &x) { rol(vec); vec[vec.size()-1] = x; } void shift() { { cout << "Shift ROL with index vector : " << endl; DynamicVector vec = { 0, 0, 0, 0, 0, 0, 0, 1 }; cout << "vec : " << endl; for (int i=0; i < vec.size(); i++) { cout << vec; std::vector idx = {0}; idx.resize(vec.size()); size_t k=1; for (auto i=idx.begin(); i != idx.end()-1; i++) { *i = k++; } vec = elements(vec, idx); } } { cout << "Shift ROR with index vector : " << endl; DynamicVector vec = { 1, 0, 0, 0, 0, 0, 0, 0 }; cout << "vec : " << endl; for (int i=0; i < vec.size(); i++) { cout << vec; std::vector idx = {vec.size()-1}; idx.resize(vec.size()); size_t k=0; for (auto i=idx.begin()+1; i != idx.end(); i++) { *i = k++; } vec = elements(vec, idx); } } { cout << "Shift ROL with lambda : " << endl; DynamicVector vec = { 0, 0, 0, 0, 0, 0, 0, 1 }; cout << "vec : " << endl; for (int i=0; i < vec.size(); i++) { cout << vec; vec = elements(vec, [size=vec.size()](size_t i){ return (i+1) % size; }, vec.size()); } } { cout << "Shift ROR with lambda : " << endl; DynamicVector vec = { 1, 0, 0, 0, 0, 0, 0, 0 }; cout << "vec : " << endl; for (int i=0; i < vec.size(); i++) { cout << vec; vec = elements(vec, [size=vec.size()](size_t i){ return (i-1) % size; }, vec.size()); } } { cout << "insert_left : " << endl; DynamicVector vec = { 0, 0, 0, 0, 0, 0, 0, 0 }; for (int i=1; i <= vec.size(); i++) { cout << vec; insert_left(vec, i); } } { cout << "insert_right : " << endl; DynamicVector vec = { 0, 0, 0, 0, 0, 0, 0, 0 }; for (int i=1; i <= vec.size(); i++) { cout << vec; insert_right(vec, i); } } { cout << "subvector insert_left : " << endl; DynamicVector vec = { 0, 0, 0, 0, 0, 0, 0, 0 }; for (int i=1; i <= vec.size(); i++) { auto sv1 = subvector(vec, 0, 5); insert_left(sv1, i+10); auto sv2 = subvector(vec, 5, 3); insert_left(sv2, i+100); cout << vec; } } }