矢量类型到数组类型::成员?

时间:2010-12-10 00:39:00

标签: c++ arrays vector

我有这样的类型:

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;
}

或者有更好的方法吗?

2 个答案:

答案 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];
  });