繁体   English   中英

C ++中的模板矢量

[英]Template Vector in C++

我在使用针对矢量类的模板时遇到了问题。 由于某种原因,marime(大小)被接收为指针。 我设法减轻了错误代码。 一些帮助将受到欢迎。

#include <iostream>
#include <stdio.h>

using namespace std;

template <class T>
class Vector {
      private: int marime; T *vect;
      public: Vector (int marime = 0){vect = new T[marime];}
              ~Vector (){
                      if ( vect != NULL ) delete [] vect;
              }
              int getMarime();
              T getVect(int);
              void setMarime(int);
              void setVect(T,int);
              Vector <T> operator+ (Vector);
              Vector <T> operator= (Vector);
              template <class U> friend istream & operator >>(istream, Vector); 
              template <class U> friend ostream & operator <<(ostream, Vector); 
};

template <class T > 
istream & operator>> (istream & in, Vector<T> & v)
{
        T val;
        int marime = v.getMarime();
        for (int i=0;i<marime; i++) {
            in>>val;
            v.setVect(val,i);
            }
        return in;
}

template <class  T> 
ostream & operator<< (ostream& out, Vector<T> & v)
{
        for (int i=0;i<v.getMarime(); i++) 
            out<<v.getVect(i)<< " " ;
        return out; 
}

template <class T>
int Vector<T>::getMarime(){
   return marime;  
     }

template <class T>
T Vector<T>::getVect(int i){
   return vect[i];
}

template <class T>
void Vector<T>::setMarime(int n){
     this->marime = n;
}

template <class T>
void Vector<T>::setVect(T val, int i){
     this->vect[i] = val;
}

template <class T>
Vector<T> Vector<T>::operator +(Vector<T> vector){
          Vector<T> temp(marime + vector.marime);
          for (int i=0; i < marime; i++)
              temp.vect[i] = vect[i];
          for (int i=marime+1; i<temp.marime; i++)
              temp.vect[i] = vector.vect[i];
          return *temp;
}

template <class T>
Vector<T> Vector<T>::operator= (Vector<T> vector){
          Vector<T> temp(vector.marime);
          for (int i=0; i < vector.marime; i++) temp.vect[i] = vector.vect[i];
          return *temp;
}
int main() {

 int n=3;
 Vector <int> A(n);
 cin>>A;
 cout<<A;   
 return 0;   

}

您无法初始化marime 您需要这样做:

 public: Vector (int marime = 0) : marime(marime) {vect = new T[marime];}

否则,它实际上只包含一个随机值。

为避免混淆,最好不要使用成员变量的名称作为构造函数参数名称。 对成员变量使用命名约定是很常见的,例如以m_开头或以下划线( marime_marime_

public: Vector (int marime = 0){vect = new T[marime];}

不应该有this->marine = marime吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM