2010-12-10 27 views
1

我有一种类型是这样的:向类型::成员的数组类型的向量?

class Foo { 
public: 
    int bar[3]; 
    /*Possibly some other members in here*/ 
}; 

什么是获得一个std:vector<Foo>int阵列的有效途径?该阵列应该是bar载体的Foos的顺序映射。

这够了吗?

int* array = new int[foos.size() * 3]; 
int offset = 0; 
BOOST_FOREACH(Foo& f, foos) { 
    memcpy(array + offset, f.bar, sizeof(int) * 3); 
    offset += sizeof(int) * 3; 
} 

或者还有更好的方法吗?

+0

我很困惑...你要求得到一个向量,但是你使用`:: operator new`来分配一个数组? – 2010-12-10 00:45:14

回答

1
std::vector<int> ivect; 
std::transform(foovect.begin(), foovect.end(), std::back_inserter(ivect), 
    [](Foo const& f) -> int { return f.bar; }); 

如果你缺乏lambda支持,当然你必须做一个仿函数来做同样的事情。 Boost.Bind将是一个很好的开端。

^^^不明白这个问题。这样做:

int * array = new int[foos.size() * 3]; // of course, using this datatype is dumb. 
int counter = 0; 
std::for_each(foos.begin(), foos.end(), [=array,&counter](Foo const& f) 
    { 
    for (int i = 0; i < 3; ++i) array[counter++] = f.bar[i]; 
    }); 
2

为什么要经历一个memcpy调用的麻烦?我只是遍历所有元素,并复制(使用赋值运算符)到新的数组中。