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

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

你能帮我把它转换成Java吗?请不要给缺点,尝试帮助。

4

3 回答 3

4

ids大概假定为指向vectors数组元素的指针,例如:

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

这是非常糟糕的风格。

于 2013-06-17T20:10:30.143 回答
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>,而不是可能包含在其中的数据的指针。

于 2013-06-17T20:19:17.650 回答
0

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

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

于 2013-06-17T20:23:53.173 回答