C++,需要帮助理解向量类中使用指针的一些构造函数和函数

发布于 2024-11-04 06:31:41 字数 1706 浏览 1 评论 0原文

大家好;

我必须开发一个 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 文件中实现它们以及如何在我的 main 中调用它们。如果你能帮助我,我会很高兴。

此致;

Greetings All;

I have to develop a C++ class library comprising a collection of numerical techniques for scientific computing. The library should implement Vector class (using pointers) with some basic functionality stated in a header file "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 */

I am a beginner in C++ and I have some confusion to understand some constructors and functions in the above code.

My questions are:

1- What is the concept of the following constructor?

    //initialize to array a
    CVector(int n, const T *a);

I mean how to initialize a vector to an array a?

2- What is the difference between the copy constructor and the assignment one?

    //copy constractor
    CVector(const CVector &rhs);

    //assignment
    CVector & operator=(const CVector &rhs);

3- I know that this function is to return the ith element of the vector:

    //i'th element
    inline T & operator[](const int i);

but what is the difference between it and this one:

    inline const T & operator[](const int i) const;

I need to understand the concept in order to know how to implement them in the .cpp file and how to call them in my main. I'll be glad if you help me.

Best regards;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谷夏 2024-11-11 06:31:42

Q1:该构造函数可用于用从 a 开始的数组的 n 个元素的内容填充向量。

例如:

   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;

Q3。第一个可以用在作业的左侧。当应用于 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[]

Q1: This constructor can be used to fill the vector with the contents of the n elements of the array starting at a.

For example:

   float a[42] = { 31, 41, 59 };
   CVector<float> v( 3, a );

Q2: The first is a copy constructor, the second is an assignment operator. The copy constructor is used to copy values into a function parameter, to return a value from a function, or to initialize a variable.

For example, the copy constructor is used for these:

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.

And the assignment is used for this:

CVector<float> v4;
v4 = v1;

Q3. The first can be used on the left-hand-side of an assignment. The const version is used when applied to a const object.

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[]
变身佩奇 2024-11-11 06:31:42

1) 将您的成员设置为:v = new T[n]; nn = n;
并复制元素: for (int i = 0; i != n; ++i) v[i] = a[i];

2) 复制赋值是指当您已经拥有一个对象时,并想为其分配不同的值。复制构造函数是指您想要使用现有对象的值创建一个新对象。

3)在c++中,有一个const函数的概念:如果你在一个const对象上调用该函数;说:CVector常量& x = ...; x[3] = 3; 不起作用,因为 x 是 const。但要想让这个方法不起作用,operator[] 需要向您的内部返回一个 const &
仅供参考:如果 x 是非常量,则 x[3] 的类型是 T &,因为 x[3] 的类型是非常量版本使用>运算符[]。但是,如果 x 是 const,则 x[3] 的类型是 const T &,因为 operator []< 的 const 版本使用/代码>。

1) set your members to: v = new T[n]; nn = n;
and copy the elements: for (int i = 0; i != n; ++i) v[i] = a[i];

2) Copy-assignment is when you already have an object, and want to assign a different value to it. Copy-constructor is when you want to create a new object with values from an existing one.

3) In c++ there is a concept of const functions: if you call the function on a const object; say: CVector<int> const& x = ...; x[3] = 3; won't work, since x is const. But for this to not work, the operator[] needs to return a const & to your internals.
FYI: if x is non-const, the type of x[3] is T & because the non-const version of operator [] is used. If x is const however, the type of x[3] is const T & because const version of operator [] is used.

俯瞰星空 2024-11-11 06:31:42

好吧,我不是 C++ 专家,所以希望更有能力的人能插话……但这是我在这个主题上的 0.02 美元。

  1. 迭代数组,将每个元素添加到向量中。我假设 n 是数组中元素的数量?

  2. 复制构造函数和赋值构造函数之间的区别可能是语义上的。它们对向量的内部结构具有相同的效果,但可以在不同的情况下使用。

  3. 这只是一个猜测,但我认为可变性就是区别。第二个函数返回一个不可变的 T,这意味着它无法更改。第一个函数返回一个可变的(可更改的)T。

Ok, I'm not a C++ guru, so hopefully someone a little more competent will chime in...but here is my $.02 on the subject.

  1. Iterate over the array, adding each element to the vector. I am assuming that n is the number of elements in the array?

  2. The difference between the copy constructor and the assignment one is probably semantic. They will have the same effect on the internal structure of the vector, but can be used in different situations.

  3. This is just a guess, but I am thinking mutability is the difference. The second function returns an immutable T, meaning that it cannot be changed. The first function returns a mutable (changeable) T.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文