定义一个类的vector的成员变量的引用
Posted
技术标签:
【中文标题】定义一个类的vector的成员变量的引用【英文标题】:Define a reference of the member variable of a vector of a class 【发布时间】:2018-02-11 16:18:17 【问题描述】:这段代码解释了我想要做的一个例子:
class Object
public:
int data;
Object() : data(0)
Object(int data) : data(data)
;
int dataSum(vector<int>& dataReference)
int sum = 0;
for(int i = 0; i < dataReference.size(); i++)
sum += dataReference[i];
return sum;
int main()
vector<Object> myObject(5);
int mySum = dataSum(myObject.data); // this line does not work
return 0;
很明显,使 dataSum 成为 Object 的成员函数可以更容易地完成,但这不是我要问的。我怎样才能只引用 myObject.data?或者如果不能用引用来做,至少用指针做同样的事情。
编辑:有人告诉我这个问题不清楚。
我想要做的是引用myObject[i].data
的每个整数,将它们放在vector<int>
引用中。
也很抱歉,如果我输入了一些语法错误,英语不是我的母语。
【问题讨论】:
你为什么试图传递myObject.data
?你希望它做什么?
我什至无法想象将int
传递给接受std::vector
的函数的最初目的。
要将引用存储在std::vector
中,您可以使用std::reference_wrapper
@Ron 它没有通过int
。
你的代码应该做什么?您的代码没有解释任何内容。
【参考方案1】:
你想要这个吗?
int dataSum(const vector<Object>& dataReference)
int sum = 0;
for (int i = 0; i < dataReference.size(); i++)
sum += dataReference[i].data;
return sum;
int main()
vector<Object> myObject 1,2,3,4 ;
int mySum = dataSum(myObject); // mySum will be 1+2+3+4 (=10) here.
return 0;
或更好:
int dataSum(const vector<Object>& dataReference)
int sum = 0;
for (const auto & object : dataReference)
sum += object.data;
return sum;
【讨论】:
是的,但是这段代码引用了整个 myObject。我只想引用 myObject.data 的整数,因为这个函数应该适用于另一个向量为什么不能使用std::accumulate
?
vector<Object> myObject(5) 1, 2, 3, 4, 5 ;
int mySum = std::accumulate(myObject.begin(), myObject.end(), 0,
[](int init, const Object& obj)
return init + obj.data;
); // mySum = 15
这首先消除了对函数的需求,并通过简单的函数调用实现了您想要的!
如果你想用std::vector<int>
做同样的事情,那么你可以在没有二元谓词的情况下调用相同的函数。
【讨论】:
函数 dataSum 只是一个例子。我想要使用的功能更复杂。我只想将每个 myObject[i].data 的整数作为 vectorstd::accumulate
的实现为例(我链接到的)【参考方案3】:
您正试图将std::vector<Object>&
传递给签名需要std::vector<int>&
的方法。如果您想处理 Object
类型的向量,那么这就是您需要实现的。如果你想使用你为dataSum
定义的方法,那么你需要像这样使用它。
std::vector<int> numVec = 1, 2, 3, 4, 5;
Object obj;
int sum = obj.dataSum(numVec);
【讨论】:
以上是关于定义一个类的vector的成员变量的引用的主要内容,如果未能解决你的问题,请参考以下文章