【问题标题】:C++ Classes within classes as a custom vector (how to init?)类中的 C++ 类作为自定义向量(如何初始化?)
【发布时间】: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,很抱歉给您带来不便,您为我指明了正确的方向。我对这方面的了解并不多。

标签: c++ class vector


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多