Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

09.06.2013, 19:20. Просмотров 1310. Ответов 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++;
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос vector (шаблонный класс) (C++):

Шаблонный класс 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;}; ...

Класс Matrix: реализовать шаблонный класс для двумерных массивов - C++
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним динамическим массивом и объекты этого типа смог создать и я ими...

Шаблонный класс и класс одномерный массив - C++
Задание: протестировать класс шаблон, с обычными типами данных я понял как делать, а как передать в шаблон свой класс я не понял. ...

Переделать класс в шаблонный класс - C++
Как данный процесс проделать? Я попробовал так по синтаксису из учебника: #include &lt;iostream&gt; #include &lt;fstream&gt; using...

5
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,603
09.06.2013, 19:33 #2
Цитата Сообщение от hil400k Посмотреть сообщение
как написать запись элемента в начало вектора
в std::vector подобной вещи нет.
Открываете http://www.cplusplus.com/reference/vector/vector/ смотрите методы. Те, что с пометкой C++11 реализовывать лишь желательно, но не обязательно.
В конец:
C++
1
data[текущий размер вектора++ - 1] = var; // var - переменная, data- массив с данными
Добавлено через 48 секунд
И еще сделать проверку на необходимость выделения дополнительного блока памяти
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
10.06.2013, 09:09 #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;
}
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.06.2013, 07:44 #4
Цитата Сообщение от MrGluck Посмотреть сообщение
в std::vector подобной вещи нет.
insert же.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
13.06.2013, 08:25 #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)
0
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,603
13.06.2013, 09:34 #6
silent_1991, так insert != push_front, вот если бы требовали написать вставку в любое место..
0
13.06.2013, 09:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 09:34
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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