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