C++

C++ STL introductory tutorial of 3 deque two way queue usage method


1. Introduction

deque (Double Ended Queues, two-way queue) is similar to a vector, but it allows for quick insertion and deletion at the head of the container (as in tail 1).

2. Complete program code

/* Be sure to read the following program after you run it */

#include <deque>
#include <iostream>
#include <algorithm>
#include <stdexcept>
using namespace std;

void print(int num)
{
  cout << num << " ";
}

int main()
{
  //1.  Initialize the
  deque<int> v;
  deque<int>::iterator iv;

  v.assign(10, 2);// will 10 A value of 2 Is assigned to deque In the
  cout << v.size() << endl; // return deque The actual number of elements
  cout << endl;

  //2.  add
  v.push_front(666);
  for (int i = 0; i < 10; i++)
    v.push_back(i);
  for_each(v.begin(), v.end(), print);// Need to be #include <algorithm>
  cout << endl;
  cout << v.size() << endl;
  cout << endl;

  //3.  Insert and traverse, reverse traverse
  v.insert(v.begin() + 3, 99);
  v.insert(v.end() - 3, 99);
  for_each(v.begin(), v.end(), print);
  cout << endl;
  for_each(v.rbegin(), v.rend(), print);// Do it on the reverse iterator ++ The operation will point to the front of the container 1 An element
  cout << endl;

  //1 The general traversal method
  for(iv = v.begin(); iv != v.end(); ++iv)
    cout << *iv << " ";
  cout << endl;
  cout << endl;

  //4.  delete
  v.erase(v.begin() + 3);
  for_each(v.begin(), v.end(), print);
  cout << endl;
  v.insert(v.begin() + 3, 99);// reduction

  v.erase(v.begin(), v.begin() + 3); // Notice it was deleted 3 Elements instead of 4 a
  for_each(v.begin(), v.end(), print);
  cout << endl;

  v.pop_front();
  v.pop_back();
  for_each(v.begin(), v.end(), print);
  cout << endl;
  cout << endl;

  //5.  The query
  cout << v.front() << endl;
  cout << v.back() << endl;

  // Dangerous practice, however 1 We'll just do it like an array
  for (int i = 15; i < 25; i++)
    cout << "Element " << i << " is " << v[i] << endl;
  // Safe practice
  int i;
  try
  {
    for (i = 15; i < 25; i++)
      cout << "Element " << i << " is " << v.at(i) << endl;
  }
  catch (out_of_range err)//#include <stdexcept>
  {
    cout << "out_of_range at " << i << endl;
  }
  cout << endl;

  //6.  empty
  v.clear();
  cout << v.size() << endl;//0
  for_each(v.begin(), v.end(), print); // already clear . v.begin()==v.end() Nothing will come of it.

  return 0;
}

Added 3.

In fact, deque is a combination of the strengths and weaknesses of vector and list. It is in between, an optimized basic sequence container for adding and deleting elements at both ends of a sequence.

It allows relatively fast random access, but unlike vector, which stores all objects in a single contiguous block of memory, it USES multiple contiguous storage blocks and keeps track of those blocks and their order in a mapping structure. The overhead of adding or removing elements to both ends of deque is minimal. It does not require a reallocation of space, so adding elements to the ends is more efficient than vector.

Features:

(1) easy random access, that is, support the [] operator and vector.at (), but the performance is not as good as vector; (2) it can insert and delete internally, but the performance is not as good as list; (3) the in-column and out-column operations can be carried out at both ends; (4) it takes up more memory than verctor.

Reference site: http: / / www cplusplus. com/reference/deque deque /