5

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

4

3 回答 3

9

如果您想使用结构的字段之一执行一些计算,那么您必须告诉 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
于 2013-03-28T10:04:36.083 回答
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);
于 2013-03-28T10:01:15.343 回答
0

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

in[position].width;

或类似的。

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

于 2013-03-28T10:02:41.940 回答