Demonstrate raw storage iterators : Deque « Data Structure « C++






Demonstrate raw storage iterators

Demonstrate raw storage iterators

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

class MyClass {
  int a, b;
  int sum;
public:
  MyClass() { 
     a = b = 0; 
     sum = 0; 
  }
  MyClass(int x, int y) { 
     a = x; 
     b = y; 
  }

  MyClass(const MyClass &o) {
   a = o.a; b = o.b;
   sum = o.sum;
  }

  MyClass operator=(const MyClass &o) {
    a = o.a; b = o.b;
    return *this;
  }

  void setsum() { 
    sum = a+b; 
  }

  void show() {
    cout << a << "," << b;
    cout << " Sum is: " << sum << endl;
  }
};

int main()
{
  unsigned char raw1[100], raw2[100];
  MyClass *p;
  deque<MyClass> dequeObject(5);
  int i;

  for(i = 0; i <5; i++) {
    dequeObject[ i ] = MyClass(i, i);
    dequeObject[ i ].setsum();
  }
  
  // store deque in uninitialized memory the wrong way
  copy(dequeObject.begin(), dequeObject.end(), (MyClass *)raw1);  

  cout << "Contents of raw memory (incorrect):\n";
  p = (MyClass *) raw1;
  for(i = 0; i <5; i++)
    p[ i ].show();

  // the right way
  copy(dequeObject.begin(), dequeObject.end(),raw_storage_iterator<MyClass *, MyClass>((MyClass *)raw2));

  cout << "Contents of raw memory (correct):\n";
  p = (MyClass *) raw2;
  for(i = 0; i <5; i++)
    p[ i ].show();

  return 0;
}

           
       








Related examples in the same category

1.One way to reverse-copy a deque.One way to reverse-copy a deque.
2.Use reverse iterators.Use reverse iterators.
3.Reverse iterators and copy.Reverse iterators and copy.
4.Assigning deque objects.Assigning deque objects.
5.Demonstrate swap() for dequeDemonstrate swap() for deque
6.Demonstrate resize() for dequeDemonstrate resize() for deque
7.Iterator values may change.Iterator values may change.
8.Demonstrate a deque.Demonstrate a deque.
9.Deque: push, pop, sort, find, begin, end, insertDeque: push, pop, sort, find, begin, end, insert