用模板类c ++重新创建矢量

时间:2013-12-07 05:10:05

标签: c++

我正在尝试使用我自己的名为MyVector的类重新创建向量。

template<class T>
class MyVector{
    private:
        T *v;
        int size;
        int max;

    public:
        MyVector();
        MyVector(int n);
        MyVector(int n, int k);
        MyVector(const MyVector &l);
        void grow();
        MyVector<T>& operator=(const MyVector &lhs);
        T &operator[](unsigned int i);
        void push_back(T t);
        int capacity();
        int length();
        void reserve (int n);
        void resize(int);
};

我正在尝试重新创建向量具有的push_back()函数。我知道我需要创建一个大小为+ 1的原始数组的副本。但是当我尝试:

template<class T>
void MyVector<T>::push_back(T t) {
    MyVector<T> *temp = v;

} 

我收到错误:

main.cpp: In member function âvoid MyVector<T>::push_back(T) [with T = int]â:
main.cpp:34:   instantiated from here
main.cpp:117: error: cannot convert âint*â to âMyVector<int>*â in initialization

我对c ++很新,任何帮助都表示赞赏。谢谢!

修改 我的新推送课程

template<class T>
void MyVector<T>::push_back(T t) {
    T *temp = v;
    v = new T[++size];
    temp[size] = t;

    for (int i = 0; i < size + 1; ++i){
        v[i] = temp[i];
    }

    delete [] temp;
}

当我在主程序中调用并打印向量时,它只是在向量的末尾附加一个0。

2 个答案:

答案 0 :(得分:4)

MyVector<T> *temp = v; T = int的{​​{1}}中,v引用类型为int*的数据成员。您正尝试将其用作MyVector*的初始值设定项。这些是指向不同类型的指针,不兼容的指针。


顺便说一下,不要只将缓冲区增加1。

将其大小加倍,或者以常数因子增加,以避免二次行为。

std::vector保证push_back的摊销线性时间。

答案 1 :(得分:1)

您要将T*类型的字段分配给MyVector<T>*类型的变量。这就是你得到错误的原因。将行更改为:

T *temp = v;