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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hil400k
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 68
#1

vector (шаблонный класс) - C++

09.06.2013, 19:20. Просмотров 1142. Ответов 5
Метки нет (Все метки)

Нужно создать простенький шаблонный класс вектор
Подскажите пожалуйста , как написать запись элемента в начало вектора и в конец вектора?!

Вот то , что я написал:

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
#include<iostream>
#include<conio.h>
using namespace std;
 
template<class T> class Vector
{
private:
    int pozition;
    int size;
    T *data;
public:
    int returnSize();
    Vector(){}
    Vector(int s){ 
        size=s; pozition=0;
        data=new T[size];
    };
    ~Vector(){ for(int i=0;i<size;i++) delete data[i]; };
    void back(T);
    void begin(T);
    void add(T);
    T& operator[](int);
    void display();
};
 
//-------------------------------------------------------------------------------------------
 
template<class T>void Vector<T>::display()
{ for(int i=0;i<pozition;i++)
{ cout<<data[i]<<endl;}
}
 
//-------------------------------------------------------------------------------------------
 
template<class T>int Vector<T>::returnSize()
{ return size; }
 
//------------------------------------------------------------------------------------------
 
 
template<class T>void Vector<T>::add(T Object)
{   
    *(data+pozition)=Object;
    pozition++;
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 19:20     vector (шаблонный класс)
Посмотрите здесь:

Шаблонный класс vector - C++
Всем привет. Помогите создать шаблонный класс vector и массив который хранит значения template&lt;typename T, size_t size&gt; class array{ ...

Создать шаблонный класс - ассоциативный массив, используя std::vector - C++
Задание выглядит так: &quot;Создать шаблонный класс – ассоциативный массив mymap с использованием STL-контейнера vector. Ключ и значение должны...

Шаблонный класс vector. Найти объекты с названием, начинающимся на символ и со значением больше value - C++
С помощью класса vector создан массив объектов CFruit. char* name = {&quot;Apple&quot;, &quot;Kiwi&quot;, &quot;Lemon&quot;, &quot;Grapes&quot;, &quot;Lime&quot;, &quot;Melon&quot;, &quot;Banana&quot;}; ...

Шаблонный класс - C++
Как его реализовать??? Смысл я понимаю, но вот как записать...не знаю:cry:

Шаблонный класс - C++
День добрый. Пишу матричный калькулятор на шаблонном классе. Хочу добиться того, чтобы можно было оперировать с матрицами всех численных...

Шаблонный класс - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class Vector{ private: int size, capacity; T* data; public: ...

шаблонный класс - C++
реализован согласно &quot;Создание конструкторов и деструктора&quot; на шаблон класса с параметром -Тип данных в файле, редактируется (байт / слово /...

Шаблонный класс - C++
Ребят, прошу Вашей помощи.. Программу я написала.. Она работает. Но теперь мне нужно переделать ее , используя шаблонный класс. Я...

Шаблонный класс - C++
Ребята, объясните пожалуйста, как работает шаблонный класс, своими словами, на скромном маленьком примерчике. Заранее благодарю.

Шаблонный класс - C++
Я запутался с шаблонами. Не пойму никак как вызвать конструктор с введенным в функции check_int() значением и как дальше вызвать функции...

Шаблонный класс - C++
Подскажите как указать реализацию методов для шаблонного класса template &lt;class T_machine&gt; class hospital_room { ...

Реализовать шаблонный класс - C++
В общем требуется реализовать шаблонный класс FixedArray&lt;T,N&gt; FixedArray - абстракция вокруг T Использование выглядит как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6998 / 4169 / 594
Регистрация: 29.11.2010
Сообщений: 11,050
09.06.2013, 19:33     vector (шаблонный класс) #2
Цитата Сообщение от hil400k Посмотреть сообщение
как написать запись элемента в начало вектора
в std::vector подобной вещи нет.
Открываете http://www.cplusplus.com/reference/vector/vector/ смотрите методы. Те, что с пометкой C++11 реализовывать лишь желательно, но не обязательно.
В конец:
C++
1
data[текущий размер вектора++ - 1] = var; // var - переменная, data- массив с данными
Добавлено через 48 секунд
И еще сделать проверку на необходимость выделения дополнительного блока памяти
igorrr37
1641 / 1269 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
10.06.2013, 09:09     vector (шаблонный класс) #3
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
#include <iostream>
#include <stdexcept>
#include <string>
 
template<class T>
class Vector
{
public:
    Vector() : ptr(0), _size(0), _capacity(0){}
    void push_back(T const& rhs)
    {
        insert(rhs, _size);
    }
    void push_front(T const& rhs)
    {
        insert(rhs, 0);
    }
 
    T& operator[](size_t const index)
    {
        if(index >= _size)
            throw std::runtime_error("Vector::operator[] exception: index >= _size");
        return ptr[index];
    }
 
    size_t size()const
    {
        return _size;
    }
 
    size_t capacity()const
    {
        return _capacity;
    }
 
    ~Vector()
    {
        delete[] ptr;
        ptr = 0;
        _size = 0;
        _capacity = 0;
    }
 
    struct Iterator
    {
    public:
        explicit Iterator(T* prhs = 0) : ptr(prhs){}
        Iterator operator++()
        {
            if(ptr)
                ++ptr;
            return *this;
        }
 
        Iterator operator++(int)
        {
            T* pret = ptr;
            if(ptr)
                ++ptr;
            return Iterator(pret);
        }
 
        T& operator*() const
        {
            return *ptr;
        }
 
        T* operator->() const
        {
            return ptr;
        }
 
        bool operator!=(Iterator irhs)
        {
            return ptr != irhs.ptr;
        }
 
    private:
        T* ptr;
    };
 
    Iterator begin()
    {
        return Iterator(ptr);
    }
 
    Iterator end()
    {
        return Iterator(ptr + _size);
    }
 
private:
    T* ptr;
    size_t _size, _capacity;
    Vector(Vector const&);
    Vector& operator=(Vector const&);
    void insert(T const& rhs, size_t const index)
    {
        if(index > _size)
            throw std::runtime_error("Vector::insert exception: index > _size");
        if(!ptr)
        {
            ptr = new T[2];
            _capacity = 2;
            ptr[0] = rhs;
            _size = 1;
        }
        else if(_size == _capacity)
        {
            T* ptmp = new T[_capacity * 2];
            size_t i = 0;
            for(i = 0; i < index; ++i)
                ptmp[i] = ptr[i];
            ptmp[index] = rhs;
            for(i = index; i < _size; ++i)
                ptmp[i + 1] = ptr[i];
            delete[] ptr;
            ptr = ptmp;
            ptmp = 0;
            _capacity *= 2;
            ++_size;
        }
        else
        {
            int i = 0;
            for(i = int(_size - 1); i >= 0; --i)
                ptr[i + 1] = ptr[i];
            ptr[index] = rhs;
            ++_size;
        }
    }
};
 
int main()
{
    Vector<std::string> vec;
    vec.push_back("111");
    vec.push_front("222");
    vec.push_back("333");
    vec.push_front("444");
    vec.push_front("555");
    std::cout << "size: " << vec.size() << "\ncapacity: " << vec.capacity() << "\n\n";
    for(auto const& val : vec)
        std::cout << val << '\n';
    return 0;
}
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.06.2013, 07:44     vector (шаблонный класс) #4
Цитата Сообщение от MrGluck Посмотреть сообщение
в std::vector подобной вещи нет.
insert же.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
13.06.2013, 08:25     vector (шаблонный класс) #5
Цитата Сообщение от silent_1991 Посмотреть сообщение
insert же.
Ну insert же вставка в любое место, а не вставка в начало (по типу push_back)

Добавлено через 1 минуту
C++
1
void Vector<T>::add(T Object)
Может лучше передать константную ссылку на объект?
C++
1
void Vector<T>::add(const T & Object)
MrGluck
Модератор
Эксперт CЭксперт С++
6998 / 4169 / 594
Регистрация: 29.11.2010
Сообщений: 11,050
13.06.2013, 09:34     vector (шаблонный класс) #6
silent_1991, так insert != push_front, вот если бы требовали написать вставку в любое место..
Yandex
Объявления
13.06.2013, 09:34     vector (шаблонный класс)
Ответ Создать тему
Опции темы

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