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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
m1ster
1 / 1 / 0
Регистрация: 21.12.2011
Сообщений: 55
#1

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

15.12.2012, 22:23. Просмотров 1563. Ответов 4
Метки нет (Все метки)

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

Свой аналог вектора - C++
Есть такой вопрос, пожалуйста, кто может подскажите кто что знает. Мне необходимо сделать аналог вектора, но со своим менеджментом памяти,...

STL шаблон вектора - C++
можете кинуть ссылку или код STL шаблона vector

Шаблон вывод вектора - C++
Нужно отобпрозить содержимое вектора, но при этом тип данных вектора изначально не известен. template &lt;typename tV, typename...

Шаблон вектора и маааленькая неполадка - C++
Всем доброго времени суток. Не судите строго, я несколько новичек в программировании, да вообще тут первый день. Но вот есть у меня...

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

Разработать шаблон класса для вывода вектора данных в поток - C++
Разработать шаблон соответствующего класса, где поля могут иметь различные типы данных. Предусмотреть наличие в классе указанных методов и...

4
DU
1483 / 1129 / 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
1
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 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];
}
1
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 сколько есть?
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 1
16.12.2012, 00:52 #5
Цитата Сообщение от m1ster Посмотреть сообщение
а что у тебя capacity сколько максимум может быть в Vector а size сколько есть?
о да!
0
16.12.2012, 00:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 00:52
Привет! Вот еще темы с ответами:

Сделать шаблон - C++
Здравствуйте имееться вот такая задача: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class Node { public: ...

Как сделать свой exe-файл? - C++
Можете пожалуйста подробно написать!:) Я знаю когда нажимаешь F5 в папке debug создается exe-файл. Но как сделать его не зависимым от...

Как сделать свой компьютер непеленгуемым? - C++
Дорогие друзья! Очень хочу написать в сети отзыв о фирме, где я работаю. Фирма славится беспределом - не платит по 2-3 месяца, все время...

Сделать свой генератор случайных чисел - C++
Всем привет. Не уверен в какую тему это писать, поэтому пишу здесь, по привычке. Необходимо сделать формулу по которой будут...


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

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

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