vector运行速度慢!解决方法

vector运行速度慢!!
#include<iostream>
#include<fstream>
#include<vector>
#include<time.h>

using namespace std;

int main()
{
float input_Buf[3];
vector<vector<float> > w1;
//for(int i=0;i!=10;++i)
//{
// w1[i].resize(3);
//}
    clock_t start=clock();
ifstream input("P.dat",ifstream::binary);
    for(int i=0;i!=1030301;++i)

  w1.push_back(vector<float>());
  input.read((char*)input_Buf,3*sizeof(float));
  for(int j=0;j!=3;++j)
  {
  //w1[i].push_back(input_Buf[j]);
  w1.back().push_back(input_Buf[j]);
  }
}
input.close();
   clock_t finish=clock();
   cout<<"运算时间为: "<<float(finish-start)/CLOCKS_PER_SEC<<"秒!"<<endl;
   return 0;
}


从文件中读取数据,保存在二维数组中,但是整个程序运行起来要27.55秒。有没有办法提高push_back的运行速度吗?我是新手,请大神指教。
------解决方案--------------------
用reserve(),此外尽量避免容器类嵌套使用
push_back是最简单的用法,稍微想想它的原理就知道对于多一点的数据肯定快不起来
------解决方案--------------------
1. input.read()可以一次多读点数据,减少读取次数;
2. 那个只有三次的循环,没有必要,直接把push_back写三次就行了;
3. 不管怎么优化,都不如首先取得数据大小,然后一次性分配足够内存,一次性将所有数据全部读入来得快。
------解决方案--------------------
减少内存分配次数, 减少内存拷贝次数,减少IO请求次数。 
#include<iostream>
#include<fstream>
#include<vector>
#include<time.h>

using namespace std;

int main()
{
     struct Val
    {
          float input_Buf[3];
    } ;
     vector<Val > w1(1030301);
    Val* p = &w[0];
    clock_t start=clock();
    ifstream input("P.dat",ifstream::binary);   
   int i=0, sz = w1.size() / 32 * 32;
    for(; i < sz;  i+= 32)
    {        
 input.read((char*)p[i].input_Buf,  32 * 3*sizeof(float));           
     }
      sz = w1.size() ;
      for(; i < sz; ++i)
      {        
 input.read((char*)p[i].input_Buf, 3*sizeof(float));           
     }
   clock_t finish=clock();
   cout<<"运算时间为: "<<float(finish-start)/CLOCKS_PER_SEC<<"秒!"<<endl;
   return 0;
}

------解决方案--------------------
vector<vector<float> > w1;   这样的东西, 速度也会大受影响. vector里面最好只保存基本数据类型和指针.
------解决方案--------------------
依我自己的观点:
1.I/0操作过多!!!大量的I/0操作明显降低计算机性能
2.迭代器嵌套。我个人觉得迭代器里不适合保存非基本类型,尤其是嵌套的情况。一般保存基本类型或者分基本类型的指针