
On 10/15/2016 03:14 AM, Michael Marcin wrote: [snip]
Arrays of Structures is the normal programming model.
Let's take a toy example, say I'm looking at some census data and have a structure that looks like:
struct citizen_t { string first_name; string last_name; int salary; int age; };
Then the Array of Structures container would be: vector<citizen_t> aos_citizens;
The Structure of Arrays version of the same data would look like:
struct soa_citizens_t { vector<string> first_names; vector<string> last_names; vector<int> salary; vector<int> age; };
soa_citizens_t soa_citizens;
[snip]
// Structures of Arrays int avg = 0; int t = 1; for ( int salary : soa_citizens.salary ) { avg += (salary - avg) / t; ++t; }
To generalize, what about: template<std::size_t N, typename... Fields> using soa_citizens_t= std::tuple < std::array<N,Fields>... > ; ? Then wouldn't: std::size_t n=5; soa_citizens_t<n,string,string,int,int> soa_citizens; int avg = 0; int t = 1; std::size_t const salary=2 for( int salary: get<salary>(soa_citizens)) { avg += (salary - avg) / t; ++t; } calculate the same thing as the avg in your example? (CONFESSION: Not tested). -regards, Larry