Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
hil400k
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 68
1

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

09.06.2013, 19:20. Просмотров 1777. Ответов 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
Всем привет. Помогите создать шаблонный класс vector и массив который хранит значения...

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

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

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

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

5
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
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
2033 / 1599 / 798
Регистрация: 21.12.2010
Сообщений: 2,751
Записей в блоге: 10
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
Эксперт С++
5016 / 3076 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
13.06.2013, 07:44 4
Цитата Сообщение от MrGluck Посмотреть сообщение
в std::vector подобной вещи нет.
insert же.
0
Croessmah
++Ͻ
15316 / 8689 / 1659
Регистрация: 27.09.2012
Сообщений: 21,416
Записей в блоге: 2
Завершенные тесты: 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Эксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
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

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

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

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


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

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

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