将Struct向量传递给函数

时间:2013-03-28 09:59:22

标签: c++

我正在努力弄清楚如何以简单而优雅的方式将结构的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

所以我想要的是将宽度向量传递给函数并执行一些计算。这是完全可能还是我必须将完整的vector fo结构传递给函数myFunc()?

3 个答案:

答案 0 :(得分:8)

如果要使用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.

BTW,即使字段类型不同,但它们可以在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

答案 1 :(得分:1)

您必须创建一个包含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);

答案 2 :(得分:0)

你需要像在myFunc中那样传递向量。但是,当您传递引用时,不会产生额外的开销。在函数中你可以调用

in[position].width;

或类似。

编辑:正如Aloc所指出的:如果您不打算更改内容,则应该将引用传递给const。