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

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

Восстановить пароль Регистрация
 
hil400k
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 68
09.06.2013, 19:20     vector (шаблонный класс) #1
Нужно создать простенький шаблонный класс вектор
Подскажите пожалуйста , как написать запись элемента в начало вектора и в конец вектора?!

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

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 (шаблонный класс)
Посмотрите здесь:

C++ Шаблонный класс
Переделать класс в шаблонный класс C++
Создать шаблонный класс - ассоциативный массив, используя std::vector C++
C++ Шаблонный класс
Шаблонный класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
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
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.06.2013, 07:44     vector (шаблонный класс) #4
Цитата Сообщение от MrGluck Посмотреть сообщение
в std::vector подобной вещи нет.
insert же.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
13.06.2013, 09:34     vector (шаблонный класс) #6
silent_1991, так insert != push_front, вот если бы требовали написать вставку в любое место..
Yandex
Объявления
13.06.2013, 09:34     vector (шаблонный класс)
Ответ Создать тему
Опции темы

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