【发布时间】: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,很抱歉给您带来不便,您为我指明了正确的方向。我对这方面的了解并不多。