#include <chrono>
#include <iostream>
#include <vector>
#include <cstring>
//---------------------------------------------------------------------------
using namespace std;
//---------------------------------------------------------------------------
template <unsigned len> struct Char { char data[len]; };
//---------------------------------------------------------------------------
struct Order { unsigned customer,item,date; unsigned price; Char<100> comment; };
//---------------------------------------------------------------------------
struct Orders {
   vector<unsigned> data_customer;
   vector<unsigned> data_item;
   vector<unsigned> data_date;
   vector<unsigned> data_price;
   vector<Char<100>> data_comment;

   void insert(Order&& order);
};
//---------------------------------------------------------------------------
void Orders::insert(Order&& order)
{
   data_customer.push_back(order.customer);
   data_item.push_back(order.item);
   data_date.push_back(order.date);
   data_price.push_back(order.price);
   data_comment.push_back(order.comment);
}
//---------------------------------------------------------------------------
void createData(Orders& orders)
{
   for (unsigned index=0;index!=10000000;++index) {
      Order o{index%1000,(7*index)%997,2013,1+(index%3),{'\0'}};
      orders.insert(move(o));
   }
}
//---------------------------------------------------------------------------
void sumPrice(Orders& orders)
{
   auto start=chrono::high_resolution_clock::now();

   unsigned sum=0;
   for (auto price:orders.data_price)
      sum+=price;

   auto stop=chrono::high_resolution_clock::now();
   cout << "result: " << sum << endl
        << "query time: " << chrono::duration_cast<chrono::microseconds>(stop-start).count() << endl;
}
//---------------------------------------------------------------------------
int main()
{
   Orders orders;
   createData(orders);
   sumPrice(orders);
}
//---------------------------------------------------------------------------
// result: 1999999
// query time: 3431 microseconds
// O1: 6271 microseconds
