通过引用返回向量元素

时间:2014-01-28 00:59:33

标签: c++

我有一个A类,我希望返回对A类中存储的向量中元素的引用。

A类

private:
vector<B> v;

public:
B& getElement()
{
      //determine i...
      return v[i];
}

在我的主要内容中,我将一个B对象设置为getElement()函数返回的对象。但是,当我修改它时,vector元素没有被修改

main()的

B ele = A.getElement();
//modify B...

我应该在这里做些什么?

3 个答案:

答案 0 :(得分:4)

getElement方法正确地返回对B实例的引用,但本地ele不是引用它是一个值。这里引人注目的是以下

// Copy constructor B::B(B& other) is being called 
B ele = B(A.getElement());

如果您希望ele成为参考,那么您需要将其声明为

B& ele = A.getElement();

答案 1 :(得分:2)

此代码:

B ele = A.getElement();
//modify B...

A.getElement()引用返回的元素的副本复制到ele

如果您希望ele引用A中的元素,请尝试:

B& ele( A.getElement());
//modify ele...

答案 2 :(得分:0)

使用此声明

B ele = A.getElement();

对象ele包含向量元素的副本。您应该使用对向量元素的引用

B &ele = A.getElement();

但是,如果例如向量将被调整大小,则考虑到引用可能变得无效。因此,最好使用函数调用在一个语句中更改向量的元素。例如

A.getElement() = SomeNewValue;

你也可以为类重载operator []。在这种情况下,代码可能看起来像

A a;
a[i] = SomeNewValue;