//数组形式
int *i = new int[10000];
//STL形式
vector<int> xxx;
for(int j = 0; j<10000;j++)
{
   xxx.push_back(j);
}//开始计时
//STL的遍历
vector<int>::iterator p_it = xxx.begin();
for(;p_it!=xxx.end();++p_it)
{
*p_it = 2;
}
//数组的遍历
for(int m= 0 ;m<10000;m++)
{
*i = m;
i++;
}数组只用了30微妙左右
而STL确用了120毫秒- -

解决方案 »

  1.   

    //数组形式
    int *i = new int[10000];
    //STL形式
    vector<int> xxx;
    xxx.reserve( 10000 );
    for(int j = 0; j<10000;j++)
    {
       xxx.push_back(j);
    }//开始计时
    //STL的遍历
    vector<int>::iterator p_it = xxx.begin();
    for(int m= 0 ;m<10000;m++)
    {
        *p_it = 2;
    p_it++;
    }
    //数组的遍历
    for(int m= 0 ;m<10000;m++)
    {
        *i = m;
        i++;
    }
    你改成这样再测试一下时间。
      

  2.   

    还是一样 
    你这个改是多余的呢 因为计时 是从
    遍历的地方开始的呢
    for(int j = 0; j<10000;j++)
    {
       xxx.push_back(j);
    }
    我这个操作已经把数据放到vector去了呢
      

  3.   

    有一个可能new的数据都在内存里头 
    vector的数据可能不在内存里头涉及到页面交换了。 
      

  4.   

    1000个元素数组是3微妙左右
    而vector用了1.2毫秒
      

  5.   

    你用debug还是release ?
      

  6.   

    是在写服务端的时候发现的
    因为采用内存池new以后没有delete
    第一轮5000个并发连接来的时候响应非常快。 因为都是直接new的
    断开 
    来第二轮 - -速度陡然下降。。客户端 出现连接不上(服务器的accpet操作不足)。。我就想是不是内存池的问题。。
    一检查。。果然这么慢 响应不过来才怪-  -
      

  7.   

    debug就很正常了p_it++;这是一个函数调用,debug版会插入一些函数调用检查esp值。
    无形中就多了N多的函数调用,自然很慢。
      

  8.   

    relase 10000个元素
    数组用了4微秒
    STL用了100微妙
      

  9.   

    这个 在某些地方确实要考虑用自己的结构来代替 STL的应用了。。
    以前还真没测试过-  -
      

  10.   

    我弄某个图像处理程序时也发现vector巨慢啊....怎么会这样的!?以前以为是因为VC6...