31 template<
typename T1,
typename T2 = T1>
38 using size_type = size_t;
39 using iterator =
typename std::vector<Type>::iterator;
40 using const_iterator =
typename std::vector<Type>::const_iterator;
43 :elements(std::vector<Type>())
48 :elements(std::vector<Type>(N, Type()))
60 :elements(std::move(t_elements))
77 return elements.empty();
81 return elements.size();
85 return elements.begin();
88 const_iterator begin()
const {
89 return elements.begin();
93 return elements.end();
96 const_iterator end()
const {
97 return elements.end();
100 Type& operator[](
size_t pos) {
101 return elements[pos];
104 Type operator[](
size_t pos)
const {
105 return elements[pos];
110 std::vector<Type> elements;
113 template<
typename T1,
typename T2 = T1>
118 using Type =
typename Base_iterable<T1, T2>::Type;
119 using size_type =
typename Base_iterable<T1, T2>::size_type;
120 using iterator =
typename Base_iterable<T1, T2>::iterator;
121 using const_iterator =
typename Base_iterable<T1, T2>::const_iterator;
127 Vector(std::vector<Type>
const& t_containor)
131 Vector(std::vector<Type>&& t_containor)
143 int find(T1
const el)
const {
152 Type& operator()(
size_t i) {
153 return this->elements[i];
156 Type operator()(
size_t i)
const {
157 return this->elements[i];
160 template<
class U1,
class U2>
166 template<
class U1,
class U2>
170 for (
const auto& el : vec)
171 if constexpr (std::is_same<U1, U2>::value)
174 out << U2(el) <<
'\n';
178 template<
typename T1,
typename T2 = T1>
183 using Type =
typename Base_iterable<T1, T2>::Type;
184 using size_type =
typename Base_iterable<T1, T2>::size_type;
185 using iterator =
typename Base_iterable<T1, T2>::iterator;
186 using const_iterator =
typename Base_iterable<T1, T2>::const_iterator;
193 Matrix(std::vector<Type>
const& t_containor)
195 N(t_containor.size())
198 Matrix(std::vector<Type>&& t_containor)
200 N(t_containor.size())
216 size_type size()
const {
220 Type& operator()(
size_t i,
size_t j) {
221 return this->elements[this->size()*i + j];
224 Type operator()(
size_t i,
size_t j)
const {
225 return this->elements[this->size()*i + j];
228 template<
class U1,
typename U2>
238 template<
class U1,
typename U2>
242 for (
size_t i = 0; i != mat.size(); ++i) {
243 for (
size_t j = 0; j != mat.size(); ++j)
244 if constexpr (std::is_same<U1, U2>::value)
245 out << mat(i, j) <<
" ";
247 out << U2(mat(i, j)) <<
" ";
253 template<
class T1,
class T2,
class T3>
258 for (
auto icopy = copy.begin(), ivec = vec.begin();
266 template<
class T1,
class T2,
class T3>
271 for (
auto icopy = copy.begin(), ivec = vec.begin();
279 template<
class T1,
class T2,
class T3>
284 for (
auto icopy = copy.begin(), ivec = vec.begin();
292 template<
class T1,
class T2,
class T3>
297 for (
auto icopy = copy.begin(), ivec = vec.begin();
306 template<
class T1,
class T2,
class T3>
311 for (
auto icopy = copy.begin(), ivec = vec.begin();
319 template<
class T1,
class T2,
class T3>
324 for (
auto icopy = copy.begin(), ivec = vec.begin();
332 template<
class T1,
class T2,
class T3>
337 for (
auto icopy = copy.begin(), ivec = vec.begin();
345 template<
class T1,
class T2,
class T3>
350 for (
auto icopy = copy.begin(), ivec = vec.begin();
358 template<
class T1,
class T2,
class T3,
class T4>
362 assert(left.size() == right.size());
364 for (
auto ileft = left.begin(), iright = right.begin();
367 init += (*ileft) * (*iright);
372 template<
class T1,
class T2,
class T3,
class T4>
376 assert(left.size() == right.size());
378 auto imat = right.begin();
380 for (
auto ivec = left.begin(); ivec != left.end(); ++ivec)
381 for (
auto ires = init.begin(); ires != init.end(); ++ires, ++imat)
382 *ires += (*imat) * (*ivec);
387 template<
class T1,
class T2,
class T3,
class T4>
391 assert(left.size() == right.size());
393 auto imat = left.begin();
395 for (
auto ires = init.begin(); ires != init.end(); ++ires)
396 for (
auto ivec = right.begin(); ivec != right.end(); ++ivec, ++imat)
397 *ires += (*imat) * (*ivec);
402 template<
class U1,
class U2>
406 assert(A.size() == B.size());
407 const size_t s = A.size();
409 for (
size_t i = 0; i != s; ++i)
410 for (
size_t j = 0; j != s; ++j)
411 for (
size_t k = 0; k != s; ++k)
412 C(i, j) += A(i, k) * B(k, j);
417 template<
class U1,
class U2>
421 return A = std::move(A * B);
424 template<
class U1,
class U2,
class Int_type>
429 for (
size_t i = 1; i < value; ++i)
std::ostream & operator<<(std::ostream &fout, csl::Type type)
Expr operator+(const Expr &a, const Expr &b)
Definition: adjacencyMatrix.h:179
Definition: adjacencyMatrix.h:32
Expr operator*(const Expr &a, const Expr &b)
Definition: adjacencyMatrix.h:114