Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单的用户定义向量模板示例_C++ - Fatal编程技术网

C++ 简单的用户定义向量模板示例

C++ 简单的用户定义向量模板示例,c++,C++,考虑以下代码: template<typename T> class vecTor { int size; T *v; public: vecTor(int s=0): size(s), v(new T[size]) // conv. ctor [1] { for(int i=0; i<size; i++) v[i]=0; } vecTor(T *x,int s) // [2] this conv. ctor

考虑以下代码:

template<typename T>
class vecTor
{
int size;
T *v;
   public:
vecTor(int s=0): size(s), 
  v(new T[size]) // conv. ctor [1]
    {
       for(int i=0; i<size; i++)
           v[i]=0;
    }

 vecTor(T *x,int s) // [2] this conv. ctor produces seg. fault if called
{
    size=s;
    for(int i=0; i<size; i++)
    v[i] = x[i];
}

void vecTorset(T *a,int s)  // this method works fine
{                           // instead of [2]
    size=s;
    for(int i=0; i<size; i++)
        v[i] = a[i];
}

~vecTor()
{
    delete [] v;
}

void printvec() const;
};

  template<typename T>
   void vecTor<T>::printvec() const
    {
     cout<<"Vector is:\n";
      for(int i=0; i<size; i++)
      cout<< v[i] <<" ";
      cout<<"\n";
    }

int main()
{
  int a[3]= {3,5,7};

  vecTor<int> v1(3);

  v1=vecTor<int>(a,3);   // this call produces seg. fault

  //v1.vecTorset(a,3);    //this call works fine

  v1.printvec();

  return 0;
模板
类向量
{
整数大小;
T*v;
公众:
向量(int s=0):大小(s),
v(新的T[size])//conv.ctor[1]
{

对于(int i=0;i您没有初始化
t*

vecTor(T *x,int s) : size(s), v(new T[size]) 
{
    for(int i=0; i<size; i++)
    v[i] = x[i];
}
向量(T*x,int-s):大小,v(新的T[size]) {
对于(int i=0;iPS.full code here:Why initialize in vecTor(),因为我们已经在vecTor(int s=0)ctor中进行了初始化。在void vecTorset(T*a,int s)中也不需要初始化。为什么?您还没有“完成”,在创建vecTor实例时只调用一个构造函数。如果您使用
vecTor(T*x,int s)构造
然后
向量(int s)
永远不会被调用。
无效向量集(T*a,int s)
不是构造函数,假设您首先使用
向量(int s)
进行构造,这就是它工作的原因。这意味着对一个conv.ctor的调用独立于对另一个转换ctor的调用,至少在这种情况下是这样。
vecTor(T *x,int s) : size(s), v(new T[size]) 
{
    for(int i=0; i<size; i++)
    v[i] = x[i];
}