#include #include #include #include #include #include template struct allocator { typedef size_t size_type; typedef ptrdiff_t difference_type; typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; typedef T value_type; typedef allocator self_t; typedef boost::container::container_detail::version_type version; void deallocate(pointer p, size_type) { std::cout << "deallocate()" << std::endl; } pointer allocation_command(boost::container::allocation_type command, size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse) { std::cout << "allocation_command(): command=" << command << ", limit_size=" << limit_size << ", prefer_in_recvd_out_size=" << prefer_in_recvd_out_size << ", reuse=" << (void*) reuse << std::endl; static char buff[200]; if (limit_size == 100) { prefer_in_recvd_out_size = 100; reuse = 0; return &buff[50]; } else if (limit_size == 200) { prefer_in_recvd_out_size = 200; return buff; } else { BOOST_ASSERT(false); } } }; int main(int argc, char *argv[]) { boost::container::vector> myvector; std::cout << "size=" << myvector.size() << " capacity=" << myvector.capacity() << std::endl; myvector.resize(100); myvector[0] = 'x'; myvector[49] = 'z'; std::cout << "size=" << myvector.size() << " capacity=" << myvector.capacity() << std::endl; std::cout << "myvector[0]='" << myvector[0] << "' myvector[49]='" << myvector[49] << "'" << std::endl; myvector.resize(200); std::cout << "size=" << myvector.size() << " capacity=" << myvector.capacity() << std::endl; std::cout << "myvector[0]='" << myvector[0] << "' myvector[49]='" << myvector[49] << "'" << std::endl; return 0; };