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吗?请不要给予弊端,尽量提供帮助。
答案 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]
)来对此类对象进行操作。