118 lines
2.5 KiB
C++
118 lines
2.5 KiB
C++
#include <blaze/Math.h>
|
|
#include <iostream>
|
|
|
|
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<int, rowVector> vec = { 0, 0, 0, 0, 0, 0, 0, 1 };
|
|
cout << "vec : " << endl;
|
|
for (int i=0; i < vec.size(); i++)
|
|
{
|
|
cout << vec;
|
|
std::vector<size_t> 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<int, rowVector> vec = { 1, 0, 0, 0, 0, 0, 0, 0 };
|
|
cout << "vec : " << endl;
|
|
for (int i=0; i < vec.size(); i++)
|
|
{
|
|
cout << vec;
|
|
std::vector<size_t> 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<int, rowVector> 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<int, rowVector> 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<int, rowVector> 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<int, rowVector> 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<int, rowVector> 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;
|
|
}
|
|
}
|
|
|
|
}
|