DSA - Data Structures and Algorithms
Loading...
Searching...
No Matches
dsa::Queue< T > Class Template Reference

Implements Queue class. More...

#include <queue.h>

Public Types

using value_type = T
 Alias for data type used in class.
using reference = T&
 Alias for reference to data type used in class.
using const_reference = const T&
 Alias for const reference to data type used in class.

Public Member Functions

 Queue ()=default
 Construct a new Queue object.
 Queue (const std::initializer_list< T > &init_list)
 Construct a new Queue object using initializer list.
 Queue (const Queue< T > &other)
 Construct a new Queue object using copy constructor.
auto operator= (const Queue< T > &other) -> Queue &
 Constructs Queue using copy assignment.
 Queue (Queue< T > &&other) noexcept
 Construct a new Queue object using move constructor.
auto operator= (Queue< T > &&other) noexcept -> Queue &
 Assign Queue object using move assignment.
 ~Queue ()=default
 Destroy the Queue object.
auto front () -> reference
 Function returns pointer to Queue first object.
auto front () const -> const_reference
 Function returns pointer to Queue first object.
auto back () -> reference
 Function returns pointer to Queue last object.
auto back () const -> const_reference
 Function returns pointer to Queue last object.
auto empty () const -> bool
 Function checks if container has no elements.
auto size () const -> size_t
 Function returns Queue size.
void push (const_reference value)
 Function add new element at the end of Queue.
void push (T &&value)
 Function add new element at the end of Queue.
void pop ()
 Function removes the first element of Queue.
void swap (Queue< T > &other) noexcept
 Function swaps content of two Queue objects.
auto operator+= (const Queue< T > &other) -> Queue< T > &
 Function add range of elements at the end of Queue.
auto operator+= (const std::initializer_list< T > &init_list) -> Queue< T > &
 Function add range of elements at the end of Queue.

Friends

auto operator== (const Queue< T > &queue1, const Queue< T > &queue2) -> bool
 Forward friend declaration to access internal container comparison operator.
auto operator< (const Queue< T > &queue1, const Queue< T > &queue2) -> bool
 Forward friend declaration to access internal container comparison operator.

Detailed Description

template<typename T>
class dsa::Queue< T >

Implements Queue class.

Template Parameters
Ttype of data stored in Queue
Todo

add operator<=>

add emplace

add non-member specialized swap function

Definition at line 42 of file queue.h.

Member Typedef Documentation

◆ const_reference

template<typename T>
using dsa::Queue< T >::const_reference = const T&

Alias for const reference to data type used in class.

Template Parameters
T&const reference to data type

Definition at line 65 of file queue.h.

◆ reference

template<typename T>
using dsa::Queue< T >::reference = T&

Alias for reference to data type used in class.

Template Parameters
T&reference to data type

Definition at line 58 of file queue.h.

◆ value_type

template<typename T>
using dsa::Queue< T >::value_type = T

Alias for data type used in class.

Template Parameters
Tdata type

Definition at line 51 of file queue.h.

Constructor & Destructor Documentation

◆ Queue() [1/3]

template<typename T>
dsa::Queue< T >::Queue ( const std::initializer_list< T > & init_list)

Construct a new Queue object using initializer list.

Parameters
[in]init_listinitializer list of values of type T

Definition at line 218 of file queue.h.

219 {
220 for (const auto& item : init_list)
221 {
222 container.push_back(item);
223 }
224 }
Implements Queue class.
Definition queue.h:43

◆ Queue() [2/3]

template<typename T>
dsa::Queue< T >::Queue ( const Queue< T > & other)

Construct a new Queue object using copy constructor.

Parameters
[in]otherQueue object of type T

Definition at line 227 of file queue.h.

228 {
229 if (other.size() >= 1)
230 {
231 for (const auto& item : other.container)
232 {
233 container.push_back(item);
234 }
235 }
236 }
auto size() const -> size_t
Function returns Queue size.
Definition queue.h:305

◆ Queue() [3/3]

template<typename T>
dsa::Queue< T >::Queue ( Queue< T > && other)
noexcept

Construct a new Queue object using move constructor.

Content of other object will be taken by constructed object

Parameters
[in,out]otherQueue object of type T

Definition at line 258 of file queue.h.

259 : container{ std::move(other.container) }
260 {
261 }

Member Function Documentation

◆ back() [1/2]

template<typename T>
auto dsa::Queue< T >::back ( ) -> reference

Function returns pointer to Queue last object.

Returns
T& reference to Queue last object

Definition at line 287 of file queue.h.

288 {
289 return container.back();
290 }

◆ back() [2/2]

template<typename T>
auto dsa::Queue< T >::back ( ) const -> const_reference
nodiscard

Function returns pointer to Queue last object.

Returns
const T& const reference to Queue last object

Definition at line 293 of file queue.h.

294 {
295 return container.back();
296 }

◆ empty()

template<typename T>
auto dsa::Queue< T >::empty ( ) const -> bool
nodiscard

Function checks if container has no elements.

Return values
trueif container is empty
falseif container is not empty

Definition at line 299 of file queue.h.

300 {
301 return container.size() == 0;
302 }

◆ front() [1/2]

template<typename T>
auto dsa::Queue< T >::front ( ) -> reference

Function returns pointer to Queue first object.

Returns
T& reference to Queue first object

Definition at line 275 of file queue.h.

276 {
277 return container.front();
278 }

◆ front() [2/2]

template<typename T>
auto dsa::Queue< T >::front ( ) const -> const_reference
nodiscard

Function returns pointer to Queue first object.

Returns
const T& const reference to Queue first object

Definition at line 281 of file queue.h.

282 {
283 return container.front();
284 }

◆ operator+=() [1/2]

template<typename T>
auto dsa::Queue< T >::operator+= ( const Queue< T > & other) -> Queue<T>&

Function add range of elements at the end of Queue.

Parameters
[in]otherQueue to read elements from
Returns
Queue<T>& reference to Queue

Definition at line 338 of file queue.h.

339 {
340 for (const auto& item : other.container)
341 {
342 push(item);
343 }
344
345 return *this;
346 }
void push(const_reference value)
Function add new element at the end of Queue.
Definition queue.h:311

◆ operator+=() [2/2]

template<typename T>
auto dsa::Queue< T >::operator+= ( const std::initializer_list< T > & init_list) -> Queue< T > &

Function add range of elements at the end of Queue.

Parameters
[in]init_liststd::initializer_list to read elements from
Returns
Queue<T>& reference to Queue

◆ operator=() [1/2]

template<typename T>
auto dsa::Queue< T >::operator= ( const Queue< T > & other) -> Queue&

Constructs Queue using copy assignment.

Parameters
[in]otherQueue object of type T
Returns
Queue& reference to Queue object

Definition at line 239 of file queue.h.

240 {
241 if (&other != this)
242 {
243 while (!container.empty())
244 {
245 container.pop_front();
246 }
247
248 for (const auto& item : other.container)
249 {
250 container.push_back(item);
251 }
252 }
253
254 return *this;
255 }

◆ operator=() [2/2]

template<typename T>
auto dsa::Queue< T >::operator= ( Queue< T > && other) -> Queue&
noexcept

Assign Queue object using move assignment.

Content of other object will be taken by constructed object

Parameters
[in,out]otherQueue object of type T
Returns
Queue& reference to Queue object

Definition at line 264 of file queue.h.

265 {
266 if (&other != this)
267 {
268 container = std::move(other.container);
269 }
270
271 return *this;
272 }

◆ pop()

template<typename T>
void dsa::Queue< T >::pop ( )

Function removes the first element of Queue.

Definition at line 323 of file queue.h.

324 {
325 container.pop_front();
326 }

◆ push() [1/2]

template<typename T>
void dsa::Queue< T >::push ( const_reference value)

Function add new element at the end of Queue.

Parameters
[in]valueelement of type T

Definition at line 311 of file queue.h.

312 {
313 container.push_back(value);
314 }

◆ push() [2/2]

template<typename T>
void dsa::Queue< T >::push ( T && value)

Function add new element at the end of Queue.

Parameters
[in]valueelement of type T

Definition at line 317 of file queue.h.

318 {
319 container.push_back(std::move(value));
320 }

◆ size()

template<typename T>
auto dsa::Queue< T >::size ( ) const -> size_t
nodiscard

Function returns Queue size.

Returns
size_t number of elements in container

Definition at line 305 of file queue.h.

306 {
307 return container.size();
308 }

◆ swap()

template<typename T>
void dsa::Queue< T >::swap ( Queue< T > & other)
noexcept

Function swaps content of two Queue objects.

Parameters
[in,out]otherobject to swap content with

Definition at line 329 of file queue.h.

330 {
331 if (&other != this)
332 {
333 std::swap(container, other.container);
334 }
335 }

◆ operator<

template<typename T>
auto operator< ( const Queue< T > & queue1,
const Queue< T > & queue2 ) -> bool
friend

Forward friend declaration to access internal container comparison operator.

Template Parameters
Ttype of data stored in Queue
Parameters
[in]queue1input container
[in]queue2input container
Return values
trueif the content of queue1 are lexicographically less than the content of queue2
falseotherwise

Definition at line 411 of file queue.h.

412 {
413 return queue1.container < queue2.container;
414 }

◆ operator==

template<typename T>
auto operator== ( const Queue< T > & queue1,
const Queue< T > & queue2 ) -> bool
friend

Forward friend declaration to access internal container comparison operator.

Template Parameters
Ttype of data stored in Queue
Parameters
[in]queue1input container
[in]queue2input container
Return values
trueif containers are equal
falseif containers are not equal

Definition at line 380 of file queue.h.

381 {
382 return queue1.container == queue2.container;
383 }

The documentation for this class was generated from the following file: