繁体   English   中英

将Struct向量传递给函数

[英]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::transformstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM