Форум программистов, компьютерный форум CyberForum.ru

allocator - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Особенности NTFS http://www.cyberforum.ru/cpp-beginners/thread929415.html
Доброго времени суток! Уважаемые форумчане, проясните мне пожалуйста один вопрос. Пишу программу, которая ищет на диске последовательность, заранее сгенерированную и записанную в файл. Проблема заключается в следующем. Если файл короткий - например 512 байт, то он пишется сразу в FILE RECORD в MFT. Все бы хорошо, но. Последние 2 байта из первого сектора записи - совершенно другие, а те 2...
C++ программирование в visual studio 2010 Завтра вступительные экзамены в универ, программирование в visual studio 2010. Вся проблема в том что 2 года назад окончила техникум в котором приходилось работать только в borland c++. Скачала visual studio 2010, сижу, смотрю, не знаю что с ним делать. Помогите пожалуйста! Создание, компилирование проекта и прочее, дальше, думаю разберусь, главное начать, и знать как закончить)) http://www.cyberforum.ru/cpp-beginners/thread929379.html
Класс Телефонная Книга C++
Доброго времени суток форумчане! Получил следующее задание, но столкнулся с проблемой.. 1) опишите класс "контакт", описывающий имя, номер телефона, примечание 2) опишите класс "Телефонная Книга", содержащий определенное количество контактов(как я понял, создать массив класса "контакт"). Определить методы добавления/удаления человека, а так же поиск по имени или примечанию. Class.h class...
посоветуйте сайт для новичка с++ C++
Посоветуйте какие сайты лучше читать для новичка с++, я сам основу учил в http://cppstudio.com/uchebniki/yazyk-programmirovaniya-s/
C++ "Программирование. Принципы и практика использования C++". Работа с графикой http://www.cyberforum.ru/cpp-beginners/thread929321.html
Добрый вечер. В данный момент изучаю указанную в заголовке книгу, а точнее ту её часть, которая посвящена работе с графикой на основе библиотеки FLTK. В конце каждой главы идут задачи на закрепление материала. Трудности с решением были и ранее, но сейчас получается осилить лишь самое простое. Отсюда просьба: если кто - то занимался по данной книге и успешно порешал задачки из данной части,...
C++ Конвертирование файла в 10-ю систему счисления и обратно Добрый вечер уважаемые Участники. Это снова я:-* Появилась тут еще 1-на интересная или не интересная задача, в общем для кого как. Мне нужна маленькая программка. Нужно конвертировать любой входной файл из обычного вида, в 10-й вид. Т.е в выходном файле будет длиннющее число. И нужна возможность конвертирования обратно - из 10-го. Пример: Входной файл test.dat, его содержание в WinHex:... подробнее

Показать сообщение отдельно
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.07.2013, 12:03  [ТС]
Набрал код из книги пытаюсь запустить вектор и map со своим аллокатором но ничего не работает, для вектора вроде rebind не определен в шаблоне, а для map ошибка: "c:\program files\microsoft visual studio 10.0\vc\include\map(213): error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов"

Нужно доработать Pool_allocator и протестить для vector и map чтоб работал!!!!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//Pool_alloc
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
#include <map>
using std::map;
#include <string>
using std::string;
#include <utility>
using std::pair;
 
class Pool
{
    struct Link{Link* next;};
 
    struct Chunk
    {
        enum{size=8*1024-16};//слегка менше 8К, чтобы кусок памяти умещался в 8К
        char mem[size];//для достижения точного выравнивания
        Chunk* next;
    };
 
    Chunk* chunks;
    const unsigned int esize;
    Link* head; 
    Pool (Pool&); //защита от копирования
    void operator=(Pool&);//защита от копирования
    void grow();//увеличить пул
 
public:
    Pool(unsigned int n);//n это размер элементов
    ~Pool();
 
    void* alloc();//выделить память под один элемент
    void free(void* b);//возвращение элемента в пул
};
 
inline void* Pool::alloc()
{
    if(head==0)grow();
    Link* p=head;//вернуть первый элемент
    head=p->next;
    return p;
}
 
inline void Pool::free(void* b)
{
    Link* p=static_cast<Link*>(b);
    p->next=head;
    head=p;
}
 
Pool::Pool(unsigned int sz)
    :esize(sz<sizeof(Link)?sizeof(Link):sz)
{
    head=0;
    chunks=0;
}
 
Pool::~Pool()//освободить все куски (chunks)
{
    Chunk* n=chunks;
    while(n)
    {
        Chunk* p=n;
        n=n->next;
        delete p;
    }
}
 
void Pool::grow()//выделяет новый 'chunk', организуя его в виде связанного
    //списка элементов размером 'esize'
{
    Chunk* n=new Chunk;
    n->next=chunks;
    chunks=n;
 
    const int nelem=Chunk::size/esize;
    char* start=n->mem;
    char* last=&start[(nelem-1)*esize];
 
    for(char*p=start;p<last;p+=esize)
        reinterpret_cast<Link*>(p)->next=reinterpret_cast<Link*>(p+esize);
 
    reinterpret_cast<Link*>(last)->next=0;
    head=reinterpret_cast<Link*>(start);
}
 
template<class T> class Pool_alloc
{
private:
    static Pool mem;//пул элементов размером sizeof(T)
 
public:
    //аналогично стандартному аллокатору(19.4.1)
    typedef unsigned int size_type;
    typedef T* pointer;
 
    Pool_alloc();
    T* allocate(size_type,void*);
    void deallocate(pointer p,size_type n);
};
 
//инициализация статического члена
template<class T> Pool Pool_alloc<T>::mem(sizeof(T));
 
template<class T> Pool_alloc<T>::Pool_alloc(){}
 
template<class T>
T* Pool_alloc<T>::allocate(size_type n,void* k)
{
    if(n==1)return static_cast<T*>(mem.alloc());
    //...
}
 
template<class T>
void Pool_alloc<T>::deallocate(pointer p,size_type n)
{
    if(n==1)
    {
        mem.free(p);
        return;
    }
    //...
}
 
int main()
{
    cout <<"Pool alloc"<<endl;
    //vector<int,Pool_alloc<int> >v;
    map<string,int,Pool_alloc<pair<const string,int> > >m;
    m["hellow"]=33;
    //m["world"]=40;
    //cout <<m["hellow"]<<m["world"]<<endl;
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru