我有这样的类型:
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 :(得分:2)
为什么要经历memcpy电话的麻烦?我只是迭代所有元素并将(使用赋值运算符)复制到新数组中。
答案 1 :(得分: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];
});