[英]Passing Vector of Struct to Function
我正在努力弄清楚如何以简单而优雅的方式将Struct的Vector传递给函数。 代码如下所示:
struct cube{ double width; double length; double height; };
vector<cube> myVec;
int myFunc(vector<double> &in)
{
// do something here
}
int test = myFunc(myVec.width); // NOT POSSIBLE
所以我想要的是将宽度向量传递给函数并执行一些计算。 这是完全可能还是我必须将完整的向量fo结构传递给函数myFunc()?
如果你想用struct的某个字段执行一些计算,那么你必须告诉myFunc
它需要使用哪个字段。 像这样:
void myFunc( std::vector< cube > & vect, double cube::*field ) {
for ( cube & c : vect ) {
c.*field // <--- do what you want
}
}
// calling
myFunc( myVect, & cube::width );
myFunc( myVect, & cube::length );
// etc.
顺便说一句,即使字段是不同的类型,但它们可以在myFunc
中的公式中使用,你仍然可以通过制作模板来使用myFunc
:
template< typename FieldType >
void myFunc( std::vector< cube > & vect, FieldType cube::*field ) {
for ( cube & c : vect ) {
c.*field // <--- do what you want
}
}
// calling will be similar to the first piece
您必须创建一个包含myVec
向量中所有width
元素的myVec
向量。
您可以使用std::transform
和std::back_inserter
来完成它。
std::vector<cube> myVec;
std::vector<double> myWidthVector;
std::transform(std::begin(myVec), std::end(myVec),
std::back_inserter(myWidthVector),
[](const cube& c) { return c.width; });
myFunc(myWidthVector);
你需要像在myFunc中那样传递向量。 但是,当您传递引用时,不会产生额外的开销。 在你可以打电话的功能中
in[position].width;
或类似的。
编辑:正如Aloc所指出的:如果你不打算更改内容,你应该传递对const的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.