类中的 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::vector
。 std::vector
有一个重载的构造函数,它接受一个可选参数,该参数指定默认的新值,该参数用于复制构造新向量中的每个值,其中一个示例将包含大小为 2 的 std::vector
的默认值传递给大小为 3 的向量的外部构造函数,从而初始化 2x3 二维向量。你只需要做同样的事情:实现一个重载的构造函数,加上 Rule Of 3 的合规性。
@Sam,很抱歉给您带来不便,您为我指明了正确的方向。我对这方面的了解并不多。
【参考方案1】:
好吧,为了做我自己的基本 Vector 类,我做了以下操作: 我创建了一个这样的构造函数:
Vector(int pSize, T twoDim) : size(pSize)
vector = new T[size];
使用这个构造函数,同一个类会获取Vector<int>
的另一个实例,并像 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++ 类作为自定义向量(如何初始化?)的主要内容,如果未能解决你的问题,请参考以下文章