如何理解C ++中向量的指针

时间:2013-06-17 20:09:17

标签: c++ vector

class A {
    public:
        std::vector<int> & getIds(const int & item) const {
            return ids[item];
        }
    private:
        std::vector<int> * ids;
}

如果ids是一个int的向量上的指针,那么为什么方法getIds,假设它使用隐藏向量按索引获取运算符[],为什么它返回对int的向量的引用而不是我期望的int。只是不明白这一点。

你能帮我转换成Java吗?请不要给予弊端,尽量提供帮助。

3 个答案:

答案 0 :(得分:4)

据推测,

ids可能是指向向量数组元素的指针,例如:

A::A() : ids(new std::vector<int>[100]) { }

这是非常糟糕的风格。

答案 1 :(得分:0)

在C和C ++中,数组只是指针(除了std :: array,我不是在讨论)。 []表示法只隐藏了一些指针算法。

int foo[10]; //foo is essentially and int *

int bar;

bar = *(foo + 3);  //This statement is equivalent to the next

bar = foo[3]; //This just means get what's pointed to 3 pointers away from the address foo

std :: vector是一个类。

std::vector<int> *ids

仅描述指向std::vector<int>实例的指针,而不是指向其中可能包含的数据。

答案 2 :(得分:0)

声明std::vector<int> * ids;表示这是指向std::vector<int>类型的单个对象或该类型数组的(第一个元素)的指针。在成员函数中使用operator[]的事实表明第二种情况就是这种情况。

operator[]应用于指针(如ids[item]中),访问指针所指向的数组的元素(在本例中为数字item的元素)。数组中的对象类型(std::vector<int>)也定义了operator[]这一事实并不重要,因为此代码调用(您可以调用{ {1}}通过添加另一个索引运算符(如operator[])或通过取消引用指针(例如ids[item][2](相当于(*ids)[2])来对此类对象进行操作。