向量和指针语法

时间:2011-12-10 06:37:04

标签: visual-c++

之间的差异是什么:

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吗? 我很困惑。

4 个答案:

答案 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 ++中,代码会编译,因为它允许不同指针类型之间的隐式转换。在较新的版本上,它不应该编译。