From b58a953f3fc9ec28ea5487e9c3372489ef62e4c5 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Mon, 10 Dec 2018 13:57:15 +0100 Subject: Simplified vector by inheriting std::array instead of having m_data --- vector/vector.cpp | 60 ++++++++----------------------------------------------- 1 file changed, 8 insertions(+), 52 deletions(-) diff --git a/vector/vector.cpp b/vector/vector.cpp index 972ade2..f422db2 100644 --- a/vector/vector.cpp +++ b/vector/vector.cpp @@ -6,12 +6,8 @@ #include template -class basic_vec { +class basic_vec : public std::array { public: - typedef T value_type; - typedef typename std::array::iterator iterator; - typedef typename std::array::const_iterator const_iterator; - static constexpr std::size_t dimensions = d; basic_vec(); @@ -20,80 +16,40 @@ public: basic_vec(const basic_vec& other); T length() const; - T& operator[](std::size_t idx); - const T& operator[](std::size_t idx) const; - - iterator begin(); - const_iterator cbegin() const; - iterator end(); - const_iterator cend() const; - -private: - std::array m_data; }; template -basic_vec::basic_vec() { - m_data.fill(static_cast(0)); +basic_vec::basic_vec() : std::array() { + this->fill(static_cast(0)); } template basic_vec::basic_vec(std::initializer_list l) { assert(l.size() <= d); - m_data.fill(static_cast(0)); - std::copy(l.begin(), l.end(), m_data.begin()); + this->fill(static_cast(0)); + std::copy(l.begin(), l.end(), this->begin()); } template template basic_vec::basic_vec(const basic_vec& other) { static_assert(d >= n); - m_data.fill(static_cast(0)); + this->fill(static_cast(0)); for (std::size_t i = 0; i < n; i++) { - m_data[i] = other[i]; + this[i] = other[i]; } } template T basic_vec::length() const { T res = static_cast(0); - for (const T& val : m_data) { + for (const T& val : *this) { res += val * val; } return res; } -template -T& basic_vec::operator[](std::size_t idx) { - return m_data[idx]; -} - -template -const T& basic_vec::operator[](std::size_t idx) const { - return m_data[idx]; -} - -template -typename basic_vec::iterator basic_vec::begin() { - return m_data.begin(); -} - -template -typename basic_vec::const_iterator basic_vec::cbegin() const { - return m_data.cbegin(); -} - -template -typename basic_vec::iterator basic_vec::end() { - return m_data.end(); -} - -template -typename basic_vec::const_iterator basic_vec::cend() const { - return m_data.cend(); -} - template basic_vec operator+(const basic_vec& rhs, const basic_vec& lhs) { basic_vec out; -- cgit v1.2.1