Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Неправильно работает функция random shuffle https://www.cyberforum.ru/ cpp-beginners/ thread2283495.html
#include <iostream> #include <fstream> #include <algorithm> #include <cstdlib> #include <time.h> #include <string.h> int main()
C++ Зависимость переменной от двух и более с++
Зависимость переменной от двух и более в С++ int main(братья коллеги) /* Мой уровень в программировании пока ровняется (- 1). Сразу попросил бы не ругать меня, поскольку похожий вопрос я...
C++ Оцените Stack
#include "stdafx.h" #include <iostream> using namespace std; class Stack { private: int push_index = 0; int n = 5; int *arr;
C++ 1000 раз нажать клавишу Добрый день.Нужна была программа,которая при нажатии в фоновом режиме клавиши ESC имитировалось 10-кратное нажатие клавиши 'W'.По-моему описал не очень понятно,поэтому приведу пример.Открывается... https://www.cyberforum.ru/ cpp-beginners/ thread2283413.html
C++ C++ Телефонный справочник https://www.cyberforum.ru/ cpp-beginners/ thread2283405.html
Доброго времени суток, есть готовое домашнее задание по С++, но есть баг который никак не могу пофиксить. Вообщем если я добавляю первый раз пользователя то все хорошо, но как только хочу добавить...
C++ Игра "Змейка": улучшить качество кода
в школе домашнейработойна лето была игра на c++.Я написал змейку,вот толЬко когда я отправил учителю свою работу он сказал что не примет,отправил частЬ кода и сказал чтобы я ее переделал.Я не понимаю...
C++ Запись текста в html-файл с кодировкой UTF-8
Хочу записать текст в html-страницу, в которой кодировка utf-8. AnsiString s1="Таблица"; wchar_t s2={L"Web-Страница"}; char s3={"Блокнот"}; wofstream to; to.open("000.html", ios_base::out);...
C++ Что значит команда for (auto c:string)? Нигде не могу найти ответ, гугл выдаёт не то. Объясните что она делает, для чего она нужна и её более понятную запись. https://www.cyberforum.ru/ cpp-beginners/ thread2283295.html
C++ Найти причины возникновения ошибки https://www.cyberforum.ru/ cpp-beginners/ thread2283282.html
не могу понять в чем проблема пишет инициализация: невозможно преобразовать "void (__cdecl *)(void)" в "void (__cdecl *)(void)" Не существует преобразований в типы массивов, хотя существуют...
C++ Напишите, пожалуйста простейший скрипт для подбора ключей биткоинов Майн-программа должна выводить все ключи, когда количество ключей превысит 3. https://www.cyberforum.ru/ cpp-beginners/ thread2283278.html
1 / 1 / 0
Регистрация: 11.08.2018
Сообщений: 5
0

Реализация своего std::vector c аллокатором памяти

11.08.2018, 14:17. Просмотров 2356. Ответов 12
Метки (Все метки)


Приветствую всех. Пытаюсь реализовать свой std::vector с аллокатором памяти и всеми конструкторами которые обозначены на cppreference, но не могу понять как правильно распределять объекты в памяти? На сколько я понял нужно пользоваться функциями типа std::uninitialized_fill_n(v_storage, v_size, value); ? Но как тогда очистить объект?

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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <cstddef>
#include <memory>
#include <iterator>
#include <initializer_list>
 
#ifndef VECTOR_H
#define VECTOR_H
//-------------------------------------------------------------------------------------------------
namespace htk
{
    template <typename type, typename allocator = std::allocator<type>>
    class vector
    {
    public:
        //Member types
        using value_type             = type;
        using allocator_type         = allocator;
        using size_type              = std::size_t;
        using diference_type         = std::ptrdiff_t;
        using reference              = value_type &;
        using const_reference        = const value_type &;
        using pointer                = typename std::allocator_traits<allocator>::pointer;
        using const_pointer          = typename std::allocator_traits<allocator>::const_pointer;
        class iterator;
        class const_iterator;
        using reverse_iterator       = std::reverse_iterator<iterator>;
        using const_reverse_iterator = std::reverse_iterator<const_iterator>;
 
        //Member functions
        //(constructor)
        vector() noexcept(noexcept(allocator()));
        explicit vector(const allocator_type & alloc) noexcept;
        vector(size_type count, const value_type & value, const allocator_type & alloc = allocator());
        explicit vector(size_type count, const allocator_type & alloc = allocator());
        template<typename InputIt> 
        vector(InputIt first, InputIt last, const allocator_type & alloc = allocator());
        vector(const vector & vec);
        vector(const vector & other, const allocator_type & alloc);
        vector(vector&& other) noexcept;
        vector(vector && other, const allocator_type & alloc);
        vector(std::initializer_list<type> init, const allocator_type & alloc = allocator());
        
        //(destructor)
        ~vector();
 
        //(operator)
        vector & operator = (const vector & vec);
        vector & operator = (vector && vec);
 
 
        allocator_type get_allocator() const;
 
    private:
        allocator_type v_alloc;
        size_type v_size;
        size_type v_capacity;
        pointer v_storage;
    };
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector() noexcept(noexcept(allocator())) : 
        v_alloc(), v_size(0), v_capacity(2), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(const allocator_type & alloc) noexcept :
        v_alloc(alloc), v_size(0), v_capacity(2), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(size_type count, const value_type & value,
        const allocator_type & alloc) :
        v_alloc(alloc), v_size(count), v_capacity(v_size * 2), v_storage(v_alloc.allocate(v_capacity))
    {
        std::uninitialized_fill_n(v_storage, v_size, value);
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(size_type count, const allocator_type & alloc) :
        v_alloc(alloc), v_size(count), v_capacity(v_size * 2), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    template<typename InputIt>
    vector<type, allocator>::vector(InputIt first, InputIt last, const allocator_type & alloc) :
        v_alloc(alloc), v_size(count), v_capacity(v_size * 2), v_storage(v_alloc.allocate(v_capacity))
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(const vector & vec) : 
        v_alloc(vec.v_alloc), v_size(vec.count), v_capacity(vec.v_capacity), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(const vector & other, const allocator_type & alloc) :
        v_alloc(alloc), v_size(0), v_capacity(2), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(vector && other) noexcept :
        v_alloc(other.v_alloc), v_size(other.v_size), v_capacity(other.v_capacity), v_storage(other.v_storage)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(vector && other, const allocator_type & alloc) :
        v_alloc(alloc), v_size(0), v_capacity(2), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::vector(std::initializer_list<type> init, const allocator_type & alloc) :
        v_alloc(alloc), v_size(0), v_capacity(2), v_storage(nullptr)
    {
        //Body of the constructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator>::~vector()
    {
        //Body of the destructor class
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator> & vector<type, allocator>::operator = (const vector & vec)
    {
        return;
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    vector<type, allocator> & vector<type, allocator>::operator = (vector && vec)
    {
        return;
    }
    //-------------------------------------------------------------------------------------------------
    template <typename type, typename allocator>
    typename vector<type, allocator>::allocator_type vector<type, allocator>::get_allocator() const
    {
 
    }
    //-------------------------------------------------------------------------------------------------
}
#endif // VECTOR_H


Вернуться к обсуждению:
Реализация своего std::vector c аллокатором памяти
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2018, 14:17
Готовые ответы и решения:

Реализация класса MyString. Стандартная библиотека, std::string, std::vector
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор....

Примерная реализация std vector bool
добрый вечер, не могу найти в сети реализацию st::vector&lt;bool&gt; - есть у кого под рукой?)...

12
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.