A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../container/deque.html below:

std::deque - cppreference.com

std::deque (double-ended queue) is an indexed sequence container that allows fast insertion and deletion at both its beginning and its end. In addition, insertion and deletion at either end of a deque never invalidates pointers or references to the rest of the elements.

As opposed to std::vector, the elements of a deque are not stored contiguously: typical implementations use a sequence of individually allocated fixed-size arrays, with additional bookkeeping, which means indexed access to deque must perform two pointer dereferences, compared to vector's indexed access which performs only one.

The storage of a deque is automatically expanded and contracted as needed. Expansion of a deque is cheaper than the expansion of a std::vector because it does not involve copying of the existing elements to a new memory location. On the other hand, deques typically have large minimal memory cost; a deque holding just one element has to allocate its full internal array (e.g. 8 times the object size on 64-bit libstdc++; 16 times the object size or 4096 bytes, whichever is larger, on 64-bit libc++).

The complexity (efficiency) of common operations on deques is as follows:

std::deque meets the requirements of Container, AllocatorAwareContainer, SequenceContainer and ReversibleContainer.

All member functions of std::deque are constexpr: it is possible to create and use std::deque objects in the evaluation of a constant expression.

However, std::deque objects generally cannot be constexpr, because any dynamically allocated storage must be released in the same evaluation of constant expression.

(since C++26) [edit] Template parameters T - The type of the elements. T must meet the requirements of CopyAssignable and CopyConstructible. (until C++11) The requirements that are imposed on the elements depend on the actual operations performed on the container. Generally, it is required that element type is a complete type and meets the requirements of Erasable, but many member functions impose stricter requirements. (since C++11)

[edit]

Allocator - An allocator that is used to acquire/release memory and to construct/destroy the elements in that memory. The type must meet the requirements of Allocator. The behavior is undefined(until C++20)The program is ill-formed(since C++20) if Allocator::value_type is not the same as T.[edit] [edit] Iterator invalidation Operations Invalidated All read only operations. Never. swap, std::swap The past-the-end iterator may be invalidated (implementation defined). shrink_to_fit, clear, insert,
emplace, push_front, push_back,
emplace_front, emplace_back Always. erase If erasing at begin - only erased elements.

If erasing at end - only erased elements and the past-the-end iterator.
Otherwise - all iterators are invalidated.

It is unspecified when the past-the-end iterator is invalidated.

(until C++11)

The past-the-end iterator is also invalidated unless the erased
elements are at the beginning of the container and the last
element is not erased.

(since C++11) resize If the new size is smaller than the old one - only erased elements and the
past-the-end iterator.

If the new size is bigger than the old one - all iterators are invalidated.
Otherwise - none iterators are invalidated.

pop_front, pop_back To the element erased.

The past-the-end iterator may be invalidated (implementation defined).

(until C++11)

The past-the-end iterator is also invalidated.

(since C++11) [edit] Invalidation notes [edit] Member types [edit] Member functions constructs the deque
(public member function) [edit] destructs the deque
(public member function) [edit] assigns values to the container
(public member function) [edit] assigns values to the container
(public member function) [edit] assigns a range of values to the container
(public member function) [edit] returns the associated allocator
(public member function) [edit] Element access access specified element with bounds checking
(public member function) [edit] access specified element
(public member function) [edit] access the first element
(public member function) [edit] access the last element
(public member function) [edit] Iterators returns an iterator to the beginning
(public member function) [edit] returns an iterator to the end
(public member function) [edit] returns a reverse iterator to the beginning
(public member function) [edit] returns a reverse iterator to the end
(public member function) [edit] Capacity checks whether the container is empty
(public member function) [edit] returns the number of elements
(public member function) [edit] returns the maximum possible number of elements
(public member function) [edit] reduces memory usage by freeing unused memory
(public member function) [edit] Modifiers clears the contents
(public member function) [edit] inserts elements
(public member function) [edit] inserts a range of elements
(public member function) [edit] constructs element in-place
(public member function) [edit] erases elements
(public member function) [edit] adds an element to the end
(public member function) [edit] constructs an element in-place at the end
(public member function) [edit] adds a range of elements to the end
(public member function) [edit] removes the last element
(public member function) [edit] inserts an element to the beginning
(public member function) [edit] constructs an element in-place at the beginning
(public member function) [edit] adds a range of elements to the beginning
(public member function) [edit] removes the first element
(public member function) [edit] changes the number of elements stored
(public member function) [edit] swaps the contents
(public member function) [edit] [edit] Non-member functions [edit] Notes [edit] Example
#include <deque>
#include <iostream>
 
int main()
{
    // Create a deque containing integers
    std::deque<int> d = {7, 5, 16, 8};
 
    // Add an integer to the beginning and end of the deque
    d.push_front(13);
    d.push_back(25);
 
    // Iterate and print values of deque
    for (int n : d)
        std::cout << n << ' ';
    std::cout << '\n';
}

Output:

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior LWG 230 C++98 T was not required to be CopyConstructible
(an element of type T might not be able to be constructed) T is also required to
be CopyConstructible [edit] See also adapts a container to provide queue (FIFO data structure)
(class template) [edit]

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4