之间的差异是什么:
Vector<int*> myVector[5] and Vector<int> *myVector[5]
我看到它的方式,在第一种情况下,我的向量将包含5个指向int的指针。 在第二种情况下,myVector是一个指向5个整数数组的指针。
我问的原因是因为我不久前写了一些代码,现在我不再理解了。
使用Vector<int> *myVector[5]
,为什么我可以
for(int i = 0; i < 5; i++)
{
myVector[i] = new Integer(13);
}
我知道运算符new返回一个指针,然后我将它存储在myVector中,但指向int的指针不是int吗? 我很困惑。
答案 0 :(得分:1)
使用Vector * myVector [5]时,myVector不是一个指向5个int数组的指针,而是一个指向vector的5个指针数组。
Vector<int> *myVector[5];
for(int i = 0; i < 5; i++)
{
myVector[i] = new Integer(13);
}
这里,myVector [i]是向量的指针。我不认为这段代码可以编译。你会给出关于Integer类的一些细节吗?
答案 1 :(得分:0)
Vector<int*> myVector[5]
创建一个大小为5到Vector<int*>
的数组。
Vector<int> *myVector[5]
创建一个包含指向Vector<int>
的5个指针的数组
相反,使用vector to vector是一个更清洁的方法:
vector<vector<int> > myVector(5);
答案 2 :(得分:0)
std::vector<int*> myVector[5]; // array of vector of pointer to int
std::vector<int> *myVector2[5]; // array of pointer to vector of int
for(int i=0;i<5;i++)
myVector[i]=*new std::vector<int *>(2);
int j=42;
myVector[0].push_back(&j);
for(int i=0;i<5;i++)
myVector2[i]=new std::vector<int>(2);
myVector2[0]->push_back(j);
答案 3 :(得分:0)
我看到它的方式,在第一种情况下,我的向量将包含5个计数 整数指针。在第二种情况下,myVector是指向a的指针 5个整数的数组。
没有。在第一种情况下,您将拥有5个Vector<int*>
个对象,在第二种情况下,您将拥有5个Vector<int>
个对象。 Vector<int*>
(可能)是指向整数的指针向量。 Vector<int>
是(可能)整数向量。所以你将拥有的是一个二维数组,尽管一个维度是一个动态数组(向量)。
我知道运算符new返回一个指针,然后 我将它存储在myVector中,但是指向int的指针不是int 对?我很困惑。
指向int的指针不是int,但它可以存储为int,至少在32位Windows上。
但在你的情况下,这不是正在发生的事情。指向Integer
的指针存储为指向Vector<int>
的指针。也许在某些旧版本的Visual C ++中,代码会编译,因为它允许不同指针类型之间的隐式转换。在较新的版本上,它不应该编译。