我正在尝试使用我自己的名为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。
答案 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;