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

Сделать свой шаблон вектора - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
15.12.2012, 22:23     Сделать свой шаблон вектора #1
надо сделать шаблон вектора,посмотрите то что сделал это правильно?
и еще вопрос,можете помочь сделать итератор,а то что то вообще не могу разобраться
а так же функцию как у вектора push_back() чтобы в конец добавляла

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
template <class T>
class Vector
{
public: //?
    int size;
    T* data;
public:
    Vector(int);
    int Size();
    T& operator [](int);
    ~Vector(void);
};
 
template <class  T> 
Vector<T>::Vector(int l)
{
    size=l;
    data = new T(l);
}
template <class  T> 
Vector<T>::~Vector(void)
{
    delete [] data;
}
template <class  T>
int Vector<T>::Size(void)
{
    return size;
}
template <class  T>
T& Vector<T>::operator[](int i)
{
    return data[i];
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 22:23     Сделать свой шаблон вектора
Посмотрите здесь:

C++ Сделать шаблон
C++ Как сделать свой компьютер непеленгуемым?
Как сделать для каждого представления свой ControlBar C++
C++ STL шаблон вектора
можно ли сделать шаблон? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2012, 22:27     Сделать свой шаблон вектора #2
нет конструктора копирования и оператора =
строка 18 - неверная. нужно new T[l];
функция Size должна быть константной.
нет константной версии оператора []
итераторы в вашем случае - это просто указатели. поэтмоу можно сделать тайпдефы:
typedef T* iterator;
typedef const T* const_iterator;
ну и становится понятно, как реализовать функции begin и end;
размер вектора и индекс элемента не могут быть отрицательными. поэтому для них лучше использовать unsigned вместо int
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 22:56     Сделать свой шаблон вектора #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
template <class T>
class Vector
{
protected: //?
    int size;
    int cap;
    T* data;
public:
    Vector(int=1);
    const int Size();
    const int capacity();
    T& operator [](int);
    void push_back(T);
    ~Vector(void);
};
template <class  T>
const int Vector<T>::Size()
{
    return size;
}
template <class  T> 
const int Vector<T>::capacity()
{
   return cap;
}
template <class  T> 
Vector<T>::Vector(int l)
{   int c;
    if(l<=0)l=1
    size=l;
    cap=1;
    while(cap<size)cap=cap*2;
    data = new T[cap];
}
template <class  T> 
void Vector<T>::push_back(T elem)
{
    T* newdata;
    if(size>cap) {
        cap=cap*2;
        newdata=new T[cap];
        for (int i=0; i<size; i++)
            newdata[i]=data[i];
        delete[] data;
        data=newdata;       
    }
    data[size]=elem;
    size++;
}
 
 
template <class  T> 
Vector<T>::~Vector(void)
{
    delete [] data;
}
 
template <class  T>
T& Vector<T>::operator[](int i)
{
    return data[i];
}
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
15.12.2012, 23:43  [ТС]     Сделать свой шаблон вектора #4
правильно ?
а можно подробнее про итераторы ,не очень понимаю
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
template <class T>
class Vector
{
public: //?
    int size;
    T* data;
public:
    Vector(Vector&);
    Vector operator=(const Vector&);
    Vector(int);
    int Size() const;
    T& operator [](int);
    ~Vector(void);
};
 
template <class  T> 
Vector<T>::Vector(int l)
{
    size=l;
    data = new T[l];
}
template <class  T> 
Vector<T>::~Vector(void)
{
    delete [] data;
}
template <class  T>
int Vector<T>::Size(void) const
{
    return size;
}
template <class  T>
T& Vector<T>::operator[](int i)
{
    return data[i];
}
template <class T>
Vector<T>::operator=(const Vector&a)
{
    size=a.size;
    for(int i=0;i!=a.size;++i)
{
    date[i]=a.data[i];
    }
    return *this;
}
template<class T>
Vector<T>::Vector(Vector&a){
size=a.size;
    for(int i=0;i!=a.size;++i)
{
    date[i]=a.data[i];
    }
 
}
Добавлено через 43 минуты
а что у тебя capacity сколько максимум может быть в Vector а size сколько есть?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.12.2012, 00:52     Сделать свой шаблон вектора #5
Цитата Сообщение от m1ster Посмотреть сообщение
а что у тебя capacity сколько максимум может быть в Vector а size сколько есть?
о да!
Yandex
Объявления
16.12.2012, 00:52     Сделать свой шаблон вектора
Ответ Создать тему
Опции темы

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