47 : m_size(n), m_data(std::make_unique<T[]>(n)) {}
50 : m_size(n), m_data(std::make_unique<T[]>(n, value)) {}
53 : m_size(other.m_size), m_data(std::move(other.m_data)) {
55 assert(!other.m_data);
59 if (
this == &other)
return *
this;
60 m_size = other.m_size;
61 m_data = std::move(other.m_data);
62 assert(!other.m_data);
82 [[nodiscard]]
const T&
front()
const {
88 return m_data[m_size - 1];
90 [[nodiscard]]
const T&
back()
const {
92 return m_data[m_size - 1];
95 [[nodiscard]] T*
data() {
return m_data.get(); }
96 [[nodiscard]]
const T*
data()
const {
return m_data.get(); }
98 [[nodiscard]] T*
begin() {
return m_data.get(); }
99 [[nodiscard]]
const T*
begin()
const {
return m_data.get(); }
100 [[nodiscard]] T*
end() {
return m_data.get() + m_size; }
101 [[nodiscard]]
const T*
end()
const {
return m_data.get() + m_size; }
103 [[nodiscard]]
bool empty()
const {
return m_size == 0; }
104 [[nodiscard]]
size_t size()
const {
return m_size; }
108 std::unique_ptr<T[]> m_data;
dynarray(dynarray &&other)
const T & operator[](size_t i) const
dynarray(const dynarray &)=delete
dynarray(size_t n, const T &value)
dynarray & operator=(const dynarray &)=delete
dynarray & operator=(dynarray &&other)