2010-12-10 65 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調用的麻煩?我只是遍歷所有元素,並複製(使用賦值運算符)到新的數組中。