Вектор Типа в Массив Типа :: Член? - PullRequest
1 голос
/ 10 декабря 2010

У меня есть такой тип:

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 ]

2 голосов
/ 10 декабря 2010

Зачем вам нужно делать вызов memcpy?Я бы просто перебрал все элементы и скопировал (используя оператор присваивания) в новый массив.

1 голос
/ 10 декабря 2010
std::vector<int> ivect;
std::transform(foovect.begin(), foovect.end(), std::back_inserter(ivect),
  [](Foo const& f) -> int { return f.bar; });

Если вам не хватает лямбда-поддержки, конечно, вам придется создать функтор, чтобы сделать то же самое.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];
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...