Mega Code Archive

 
Categories / C++ / Data Structure
 

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; }