From 8beaac5193d0b822e0470404cc0edfff90a718bb Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 20 Apr 2022 16:50:36 +0300 Subject: [PATCH] finish PIVector doc --- libs/main/containers/pivector.h | 71 ++++++++++++++++++++------------- main.cpp | 8 ++-- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/libs/main/containers/pivector.h b/libs/main/containers/pivector.h index 6e899991..1b8708d7 100644 --- a/libs/main/containers/pivector.h +++ b/libs/main/containers/pivector.h @@ -1936,7 +1936,13 @@ public: //! \~russian Изменяет размерность массива, из одномерного массива создает двухмерный. //! \~\details //! \~russian + //! \param rows размер внешнего массива + //! \param cols размер внутренних массивов + //! \param order порядок обхода исходного массива, задаётся с помощью \a ReshapeOrder //! \~english + //! \param rows size external array + //! \param cols size internal arrays + //! \param order the order of traversing the source array is set using \a ReshapeOrder //! \~\code //! PIVector v{1, 2, 3, 4}; //! PIVector> m1 = v.reshape(2,2); @@ -1944,7 +1950,7 @@ public: //! PIVector> m2 = v.reshape(2,2, ReshapeByColumn); //! piCout << m2; // {{1, 3}, {2, 4}} //! \endcode - //! \~\sa \a map(), \a reduce() + //! \~\sa \a map(), \a reduce(), \a flatten() inline PIVector> reshape(size_t rows, size_t cols, ReshapeOrder order = ReshapeByRow) const { #ifndef NDEBUG if (rows*cols != piv_size) { @@ -1971,10 +1977,25 @@ public: return ret; } + //! \brief + //! \~english Changes the dimension of the array, creates a one-dimensional array from a two-dimensional array. + //! \~russian Изменяет размерность массива, из двухмерный массива создает одномерный. + //! \~\details + //! \~russian Делает массив плоским. + //! Порядок обхода исходного массива, задаётся с помощью \a ReshapeOrder. + //! \~english Makes the array flat. + //! Еhe order of traversing the source array is set using \a ReshapeOrder. + //! \~\code + //! PIVector v{1, 2, 3, 4, 5, 6}; + //! PIVector> xv = v.reshape(3,2); + //! piCout << xv; // {{1, 2}, {3, 4}, {5, 6}} + //! piCout << xv.flatten(); // {1, 2, 3, 4, 5, 6} + //! \endcode + //! \~\sa \a map(), \a reduce(), \a reshape() template>::value , int>::type = 0> - inline PIVector flat(ReshapeOrder order = ReshapeByRow) const { + inline PIVector flatten(ReshapeOrder order = ReshapeByRow) const { PIVector ret; if (isEmpty()) return ret; size_t rows = size(); @@ -1996,35 +2017,31 @@ public: return ret; } + //! \brief + //! \~english Changes the dimension of the two-dimensional array. + //! \~russian Изменяет размерность двухмерного массива. + //! \~\details + //! \~russian + //! \param rows размер внешнего массива + //! \param cols размер внутренних массивов + //! \param order порядок обхода исходного массива, задаётся с помощью \a ReshapeOrder + //! \~english + //! \param rows size external array + //! \param cols size internal arrays + //! \param order the order of traversing the source array is set using \a ReshapeOrder + //! \~\code + //! PIVector v{1, 2, 3, 4, 5, 6}; + //! PIVector> xv = v.reshape(3,2); + //! piCout << xv; // {{1, 2}, {3, 4}, {5, 6}} + //! piCout << xv.reshape(2,3); // {{1, 2, 3}, {4, 5, 6}} + //! \endcode + //! \~\sa \a map(), \a reduce(), \a reshape() template>::value , int>::type = 0> inline PIVector> reshape(size_t rows, size_t cols, ReshapeOrder order = ReshapeByRow) const { -#ifndef NDEBUG - if (rows*cols != piv_size) { - printf("error with PIVector<%s>::reshape\n", __PIP_TYPENAME__(T)); - } -#endif - assert(rows*cols == piv_size); - PIVector> ret; - if (isEmpty()) return ret; -// size_t old_rows = size(); -// size_t old_cols = at(0).size(); -// ret.resize(rows); -// if (order == ReshapeByRow) { -// for (size_t r = 0; r < rows; r++) { -// ret.append(at(r)); -// } -// } -// if (order == ReshapeByColumn) { -// for (size_t c = 0; c < cols; c++) { -// for (size_t r = 0; r < rows; r++) { -// ret << at(r)[c]; -// } -// } -// } -// ret.resize(rows * cols); - return ret; + PIVector fl = flatten(); + return fl.reshape(rows, cols, order); } private: diff --git a/main.cpp b/main.cpp index 1316a65f..b0be3ac7 100644 --- a/main.cpp +++ b/main.cpp @@ -62,8 +62,10 @@ PICout operator <<(PICout s, const ConstChars & v) { } int main(int argc, char * argv[]) { - PIVector v{1, 2, 3, 4}; - PIVector> v2 = v.reshape(2,2, ReshapeByRow); - piCout << v2; + PIVector v{1, 2, 3, 4, 5, 6}; + PIVector> xv = v.reshape(3,2); + piCout << xv; + piCout << xv.flatten(); + piCout << xv.reshape(2,3); return 0; }