Here is the ideological way of C + 11:
std::deque<SomeDataClass> MyClassName::someMethod() { std::deque<DirectedEdge> allDataItems; for( auto const& dq : someMember ) { allDataItems.insert( allDataItems.end(), std::begin(dq), std::end(dq) ); } return allDataItems; }
another way would be to write a concatinate function:
struct concatenate { template<typename Dest, typename Src> Dest&& operator()( Dest&& d, Src const& s ) const { using std::begin; using std::end; typename std::decay<Dest>::type retval = std::forward<Dest>(d); retval.insert( end(retval), begin(s), end(s) ); return std::move(retval); } }; std::deque<SomeDataClass> MyClassName::someMethod() { using std::begin; using std::end;
which is pretty pretty. If you do not like std::accumulate ,
std::deque<SomeDataClass> MyClassName::someMethod() { std::deque<DirectedEdge> allDataItems; for( auto const& dq : someMember ) { allDataItems = concatenate( std::move(allDataItems), dq ); } return allDataItems; }
both of them are roughly equivalently effective.
Yakk
source share