Containers

C arrayvectordequelist
Insert/erase at startn/alinearconstantconstant
Insert/erase at endn/aconstantconstantconstant
Insert/erase in middlen/alinearlinearconstant
Access first elementconstantconstantconstantconstant
Access last elementconstantconstantconstantconstant
Access middle elementconstantconstantconstantlinear
Overheadnonelowmediumhigh

Sequence Containers

The three different sequence containers all have different time and space complexities for their different operations:

vector

example:
#include < iostream.h >
#include < vector.h >
void print (vector < double >& vector_)
{
  for (int i = 0; i < vector_.size (); i++)
    cout << vector_[i] << " ";
  cout << endl;
}

int main ()
{
  vector < double > v1; // Empty vector of doubles.
  v1.push_back (32.1);
  v1.push_back (40.5);
  vector< double > v2; // Another empty vector of doubles.
  v2.push_back (3.56);
  cout << "v1 = ";
  print (v1);
  cout << "v2 = ";
  print (v2);
  v1.swap (v2); // Swap the vector's contents.
  cout << "v1 = ";
  print (v1);
  cout << "v2 = ";
  print (v2);
  v2 = v1; // Assign one vector to another.
  cout << "v2 = ";
  print (v2);
  return 0;
}
output:

v1 = 32.1 40.5
v2 = 3.56
v1 = 3.56
v2 = 32.1 40.5
v2 = 3.56

deque

example:
#include < iostream.h >
#include < deque.h >

int main ()
{
  deque< int > d;
  d.push_back (4); // Add after end.
  d.push_back (9);
  d.push_back (16);
  d.push_front (1); // Insert at beginning.
  for (int i = 0; i < d.size (); i++)
    cout << "d[" << i << "] = " << d[i] << endl;
  cout << endl;
  d.pop_front (); // Erase first element.
  d[2] = 25; // Replace last element.
  for (i = 0; i < d.size (); i++)
    cout << "d[" << i << "] = " << d[i] << endl;
  return 0;
}
output:

d[0] = 1
d[1] = 4
d[2] = 9
d[3] = 16

d[0] = 4
d[1] = 9
d[2] = 25

list

example:
#include < iostream.h >
#include < list.h >

int array1 [] = { 9, 16, 36 };
int array2 [] = { 1, 4 };

int main ()
{
  list< int > l1 (array1, array1 + 3);
  list< int > l2 (array2, array2 + 2);
  list< int >::iterator i1 = l1.begin ();
  l1.splice (i1, l2);
  list< int >::iterator i2 = l1.begin ();
  while (i2 != l1.end ())
    cout << *i2++ << endl;
  return 0;
}
output:

1
4
9
16
36

Container Adaptors

Container adaptors take sequence containers as their type arguments, for example:
stack < vector < int > > a;

stack

queue

priority_queue

Associative Containers

set

multiset

map

multimap