大家好;
我必须开发一个c++类库,其中包含一系列用于科学计算的数值技术。库应该实现Vector类(使用指针),并在头文件"Vector.h"中声明一些基本功能。
#ifndef VECTOR_H
#define VECTOR_H
template <class T>
class CVector {
private:
int nn; //size of array
T *v; //pointer to array of data
public:
//Default constractor
CVector();
//zero based array
CVector(int n);
//initialize to constant of value a
CVector(int n, const T &a);
//initialize to array a
CVector(int n, const T *a);
//copy constractor
CVector(const CVector &rhs);
//assignment
CVector & operator=(const CVector &rhs);
//i'th element
inline T & operator[](const int i);
inline const T & operator[](const int i) const;
inline int size() const;
//resize (contents not preserved)
void resize(int newn);
//resize and assign a constant value
void assign(int newn, const T &a);
//deconstractor
~CVector();
};
#endif /* VECTOR_H */
我是c++的初学者,在理解上面代码中的一些构造函数和函数时,我有一些困惑。
我的问题是:
1-下面构造函数的概念是什么?
//initialize to array a
CVector(int n, const T *a);
我的意思是如何将向量初始化为数组a?
2-复制构造函数和赋值构造函数有什么区别?
//copy constractor
CVector(const CVector &rhs);
//assignment
CVector & operator=(const CVector &rhs);
3-我知道这个函数是返回向量的第I个元素:
//i'th element
inline T & operator[](const int i);
但是它和这个有什么区别呢?
inline const T & operator[](const int i) const;
我需要了解这个概念,以便知道如何在.cpp文件中实现它们,以及如何在我的主程序中调用它们。如果你能帮助我,我会很高兴的。
问好;
Q1:这个构造函数可以用来用数组中从a开始的n个元素的内容填充vector。
例如:
float a[42] = { 31, 41, 59 };
CVector<float> v( 3, a );
Q2:第一个是复制构造函数,第二个是赋值操作符。复制构造函数用于将值复制到函数形参中、从函数返回值或初始化变量。
例如,复制构造函数用于以下情况:
CVector<float> foo( CVector<float> v ) { ... }
...
CVector<float> v1;
CVector<float> v2 = foo( v1 ); // Copy constructor used to pass in v1, and to return v2
CVector<float> v3 = v1; // Copy constructor used to copy v1 to v2.
赋值语句用于:
CVector<float> v4;
v4 = v1;
第三季。第一种可用于赋值操作的左侧。const版本在应用于const对象时使用。
void bar( const float & fval ) { ... }
...
CVector<float> v1( 3, a );
v1[0] = 42; // Non-const operator[]
const CVector<float> v2 = v1;
float value = v2[0]; // Const operator[]
bar( v2[0] ); // Const operator[]
1)设置您的成员为:v = new T[n]; nn = n;
并复制元素:for (int i = 0; i != n; ++i) v[i] = a[i];
2)复制赋值是当你已经有了一个对象,想给它赋一个不同的值。复制构造函数用于用现有对象的值创建新对象。
3) c++中有一个const函数的概念:如果在const对象上调用函数;说:CVector<int> const& x = ...; x[3] = 3;
不能工作,因为x
是常量。但这不起作用,operator[]
需要返回一个const &
到你的内部。仅供参考:如果x
是非const,则x[3]
的类型为T &
,因为使用的是operator []
的非const版本。如果x
为const,则x[3]
的类型为const T &
,因为使用的是operator []
的const版本。
好吧,我不是c++专家,所以希望有更有能力的人能加入进来…这是我的钱。在这个问题上。
-
遍历数组,将每个元素添加到vector中。我假设n是数组中元素的个数?
-
复制构造函数和赋值构造函数之间的区别可能是语义上的。它们将对矢量的内部结构产生相同的效果,但可以在不同的情况下使用。
-
这只是一个猜测,但我认为可变性是不同的。第二个函数返回一个不可变的T,这意味着它不能被改变。第一个函数返回一个可变的t。