此代码解释了我想要做的一个例子:
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>
引用中。
对不起如果我说了一些语法错误,英语不是我的母语。
答案 0 :(得分:3)
你想要这个吗?
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;
}
答案 1 :(得分:2)
为什么不能使用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>
做同样的事情,那么你可以在没有二元谓词的情况下调用相同的函数。
答案 2 :(得分:0)
您正试图将std::vector<Object>&
传递给签名需要std::vector<int>&
的方法。如果您想处理Object
类型的向量,那么您需要实现的内容。如果您想使用为dataSum
定义的方法,那么您需要像这样使用它。
std::vector<int> numVec = {1, 2, 3, 4, 5};
Object obj;
int sum = obj.dataSum(numVec);