#include ‹stl.h›
#include ‹ospace/stl/examples/myaloc.h›
int main {
{
cout ‹‹ "vectors:" ‹‹ endl;
os_my_allocator‹int› alloc;
vector‹int› v3(alloc);
v3.push_back(42);
vector‹int› v4(alloc);
v4.push_back(42);
}
{
cout ‹‹ "bit_vectors:" ‹‹ endl;
os_my_allocator‹unsigned int› alloc;
bit_vector v1(alloc);
v1.push_back(1);
}
{
cout ‹‹ "deques:" ‹‹ endl;
os_my_allocator‹int› alloc;
deque‹int› d(alloc);
d.push_back(42);
}
{
cout ‹‹ "lists:" ‹‹ endl;
os_my_allocator‹os_list_node‹int› › alloc;
list‹int› l(alloc);
l.push_back(42);
}
{
cout ‹‹ "sets:" ‹‹ endl;
os_my_allocator‹os_value_node‹int› › alloc;
set‹int, less‹int› › s(alloc);
s.insert(42);
}
{
cout ‹‹ "maps" ‹‹ endl;
os_my_allocator‹os_value_node‹os_pair‹const int, float› › › alloc;
map‹int, float, less‹int› › m(alloc);
m[4] = 2.0;
}
return 0;
}
release2.cpp
#include ‹stl.h›
#include ‹iostream.h›
class X {
public:
X(int i_): i (i_) {}
~X {cout ‹‹ "Delete X(" ‹‹ i ‹‹ ")" ‹‹ endl;}
int i;
};
ostream& operator ‹‹ (ostream& stream_, const X& x_) {
return stream_ ‹‹ "X(" ‹‹ x_.i ‹‹ ")";
}
int main {
vector‹X*› v;
v.push_back(new X(2));
v.push_back(new X(1));
v.push_back(new X(4));
vector‹X*›::iterator i;
cout ‹‹ "Initial contents:" ‹‹ endl;
for (i = v.begin; i!= v.end; i++) cout ‹‹ " " ‹‹ *(*i) ‹‹ endl;
release(v.begin); // Delete the first heap-based object.
v.erase(v.begin); // Erase the first element.
cout ‹‹ "Remaining contents:" ‹‹ endl;
for (i = v.begin; i != v.end; i++) cout ‹‹ " " ‹‹ *(*i) ‹‹ endl;
release(v.begin, v.end); // Delete remaining heap-based objects.
v.erase(v.begin, v.end); // Erase remaining elements.
return 0;
}
map1.cpp
#include ‹iostream.h›
#include ‹stl.h›
int main {
typedef map‹char, int, less‹char› › maptype;
maptype m;
// Store mappings between roman numerals and decimals.
m['l'] = 50;
m['x'] = 20; // Deliberate mistake.
m['v'] = 5;
m['i'] = 1;
cout ‹‹ "m['x'] = " ‹‹ m['x'] ‹‹ endl;
m['x'] = 10; // Correct mistake.
cout ‹‹ "m['x'] = " ‹‹ m['x'] ‹‹ endl;
cout ‹‹ "m['z'] = " ‹‹ m['z'] ‹‹ endl; // Note default value is added.
cout ‹‹ "m.count('z') = " ‹‹ m.count('z') ‹‹ endl;
pair‹maptype::iterator, bool› p;
p = m.insert(pair‹const char, int›('c', 100));
if (p.second) cout ‹‹ "First insertion successful" ‹‹ endl;
p = m.insert(pair‹const char, int› ('c', 100));
if (p.second) cout ‹‹ "Second insertion successful" ‹‹ endl;
else cout ‹‹ "Existing pair " ‹‹ (*(p.first)).first ‹‹ " -› " ‹‹ (*(p.first)).second ‹‹ endl;
return 0;
}
mismtch2.cpp
#include ‹stl.h›
#include ‹iostream.h›
#include ‹string.h›
bool str_equal(const char* a_, const char* b_) {
return ::strcmp(a_, b_) == 0 ? 1: 0;
}