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

Класс Вектор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.10.2010, 18:48     Класс Вектор #1
Решил написать свой класс вектор, приблизительно как в СТЛ. Сначала решил сделать каркас. Все функции без аллокатора и итератора. Сделал. И теперь возникла проблема. Стоит ли писать самому простенький аллокатор? И как это делается, насколько я понял через malloc/free или же new/delete тоже можно? Или лучше использовать стандартный класс Allocator? По тому, как делается сам аллокатор упоминание нашел в трех книжках, точнее про существование такого.
Две книжки Шилдта.
Книжка Страуструпа.

Что посоветуете делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2010, 18:48     Класс Вектор
Посмотрите здесь:

Класс Вектор C++
Класс вектор C++
Класс вектор C++
Вектор класс C++
C++ Класс вектор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
12.10.2010, 23:32     Класс Вектор #2
Можно поковырять исходники

Не по теме:

http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/files.html

если ссылка не пройдёт,то гуглить надо на исходники stl
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
12.10.2010, 23:36     Класс Вектор #3
Цитата Сообщение от Lavroff Посмотреть сообщение
И как это делается, насколько я понял через malloc/free или же new/delete тоже можно?
Простите, а какую итоговую разницу Вы видите между этими подходами?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.10.2010, 23:39  [ТС]     Класс Вектор #4
ЗЫ. Доделал вроде. Протестировал на стандартном векторе - канает.

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
#include <limits>
 
template<class AllocType>
class Allocator
{
public:
    typedef AllocType value_type;
    typedef AllocType* pointer;
    typedef AllocType& reference;
    typedef const AllocType* const_pointer;
    typedef const AllocType& const_reference;
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
 
    Allocator();
    Allocator(const Allocator&);
    template<class OtherAlType>
    Allocator(const Allocator<OtherAlType>&) throw()
    {
    }
    Allocator& operator =(const Allocator&);
    ~Allocator();
    pointer adress (reference ref) const
    {
        return (&ref);
    }
    const_pointer adress (const_reference ref) const
    {
        return (&ref);
    }
    pointer allocate (size_type, const_pointer hint=0);
    void deallocate (pointer p, size_type n);
    const size_type max_size () const throw()
    {
        return std::numeric_limits<AllocType>::max();
    }
    pointer construct (pointer p, const_reference val);
    void destroy (pointer p);
    template<class OtherAlType>
    struct rebind
    {
        typedef Allocator<OtherAlType> other;
    };
};
 
template<class AllocType>
Allocator<AllocType>::Allocator() throw()
{
}
 
template<class AllocType>
Allocator<AllocType>::Allocator(const Allocator<AllocType>&)
{
}
 
template<class AllocType>
Allocator<AllocType>::~Allocator() throw()
{
}
 
template<class AllocType>
AllocType* Allocator<AllocType>::allocate(size_type sz, const_pointer hint=0)
{
    return new AllocType[sz];
}
 
template<class AllocType>
void Allocator<AllocType>::deallocate(pointer p, size_type)
{
    delete[] p;
}
 
template<class AllocType>
AllocType* Allocator<AllocType>::construct(pointer p, const_reference val)
{
    return new(p) AllocType(val);
}
 
template<class AllocType>
void Allocator<AllocType>::destroy(pointer p)
{
    p->~AllocType();
}
 
template<class AllocType>
Allocator<AllocType>& Allocator<AllocType>::operator =(const Allocator<AllocType> &)
{
    return *this;
}
 
template<class AllocType>
bool operator ==(const Allocator<AllocType>&, const Allocator<AllocType>&) throw()
{
    return true;
}
 
template<class AllocType>
bool operator !=(const Allocator<AllocType>&, const Allocator<AllocType>&) throw()
{
    return false;
}
Yandex
Объявления
12.10.2010, 23:39     Класс Вектор
Ответ Создать тему
Опции темы

Текущее время: 16:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru