类中的 C++ 类作为自定义向量(如何初始化?)

Posted

技术标签:

【中文标题】类中的 C++ 类作为自定义向量(如何初始化?)【英文标题】:C++ Classes within classes as a custom vector (how to init?) 【发布时间】:2020-05-17 00:49:45 【问题描述】:

好的,现在我想创建自己的基本向量,我这样做了:

template <typename T>
class Vector 
    T * vector;
    int size;
public:
    Vector(int pSize = 10) : size(pSize)
    
        vector = new T[size];
    
    T& operator[](int i)
    
        return vector[i];
    
;

所以对于一维向量来说,一切都很好。我能做到:

Vector<int> vectorInt(20);
for (int i = 0; i < 20; i++)
    vectorInt[i] = i;
for (int i = 0; i < 20; i++)
    std::cout << vectorInt[i] << std::endl;

好的,但问题是当我想我的向量放入同一个向量类时,如下所示:

Vector<Vector<int>> xy(5);
for (int i = 0; i < 5; i++)

    for (int j = 0; j < 10; j++)
    
        xy[i][j] = j;
        std::cout << xy[i][j] << " ";
    
    std::cout << std::endl;

问题是 我无法insider 向量初始化为请求的大小(正如构造函数所说,它默认为 10)。只有外人一到“五”。

是否有在声明时初始化内部向量?

【问题讨论】:

您必须编写更多代码才能做到这一点。 See this question about the analogous initialization for std::vector 并为您的模板实现相同的功能。 @Sam 该链接没有回答我的问题。我知道我必须编写更多代码,但我不知道该怎么做。 该链接肯定会回答您的问题。它准确地演示了如何做你想做的事情,但使用std::vectorstd::vector 有一个重载的构造函数,它接受一个可选参数,该参数指定默认的新值,该参数用于复制构造新向量中的每个值,其中一个示例将包含大小为 2 的 std::vector 的默认值传递给大小为 3 的向量的外部构造函数,从而初始化 2x3 二维向量。你只需要做同样的事情:实现一个重载的构造函数,加上 Rule Of 3 的合规性。 @Sam,很抱歉给您带来不便,您为我指明了正确的方向。我对这方面的了解并不多。 【参考方案1】:

好吧,为了做我自己的基本 Vector 类,我做了以下操作: 我创建了一个这样的构造函数:

Vector(int pSize, T twoDim) : size(pSize)

    vector = new T[size];

使用这个构造函数,同一个类会获取Vector&lt;int&gt; 的另一个实例,并像 std 库那样创建一个实例。

这是我的最终代码,它动态地初始化一个 2d 5x10 矩阵:

#include <iostream>
template <typename T>
class Vector 
    T * vector;
    int size;
public:
    Vector(int pSize, T twoDim) : size(pSize)
    
        vector = new T[size];
    
    Vector(int pSize = 10) : size(pSize)
    
        vector = new T[size];
    
    T& operator[](int i)
    
        return vector[i];
    
;

int main()

    Vector<Vector<int>> xy(5, Vector<int>(10,0));
    for (int i = 0; i < 5; i++)
    
        for (int j = 0; j < 10; j++)
        
            xy[i][j] = j;
            std::cout << xy[i][j] << " ";
        
        std::cout << std::endl;
    
    return EXIT_SUCCESS;

【讨论】:

以上是关于类中的 C++ 类作为自定义向量(如何初始化?)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自定义值初始化模板类中的数组?

类中的错误二维向量类初始化

C ++:如何访问另一个类中的类函数?

如何在Mexfile中的matlab(矩阵,单元格)和c ++(向量或自定义类)之间正确转换变量

如何将对象添加到类中的静态向量

我自己的堆栈类中的 C++ 奇怪行为