C++ 在cpp中使用模板创建向量

C++ 在cpp中使用模板创建向量,c++,templates,C++,Templates,这是一本教科书中的例子。我们正在使用模板创建向量。在main函数中,我们将预定义数组复制到向量中。最后,我们将两个向量相乘。虽然程序编译得很好,但程序无法执行。代码有什么问题吗 #include <iostream> const int size = 3; template<class T> class vector { T* v; public: vector() { v = new T[size]; for

这是一本教科书中的例子。我们正在使用模板创建向量。在main函数中,我们将预定义数组复制到向量中。最后,我们将两个向量相乘。虽然程序编译得很好,但程序无法执行。代码有什么问题吗

#include <iostream>

const int size = 3;

template<class T>
class vector
{
    T* v;
public:
    vector()
    {
        v = new T[size];
        for (int i = 0; i < size; i++){
            v[i] = 0;
        }
    }

    vector(const T* a)
    {
        for (int i = 0; i < size; i++){
            v[i] = a[i];
        }
    }

    T operator * (const vector& y)
    {
        T sum = 0;
        for (int i = 0; i < size; i++){
            sum += this->v[i] * y.v[i];
        }
        return sum;
    }
};

int main()
{
    int x[3] = { 1, 2, 3 };
    int y[3] = { 4, 5, 6 };
    vector<int> v1;
    vector<int> v2;
    v1 = x;
    v2 = y;
    int R = v1 * v2;
    std::cout << R;
    return 0;
}

首先,在这个构造函数中

   vector(T *a)
  {
      for(int i=0;i<size;i++){
         v[i]= a[i];
     }
  }
将创建vector类型的临时对象,并在赋值后将其删除。因此,新创建的对象将具有无效的指针v


您必须至少定义复制构造函数、复制赋值运算符和析构函数。

到底什么失败了?你的错误是什么?另外,使用名称空间std时要小心;该命名空间已包含向量。您应该使用std::而不是std::cout。如果这是教科书中的一个示例,并且您在键入时没有忘记任何东西,请删除该教科书并找到更好的教科书。代码很糟糕。欢迎使用SO:SE。你试过了解原因吗?当你试着把元素放在构造函数*a中时,v是未初始化的。
v1 = x; v2 = y;