- 论坛徽章:
- 2
|
本帖最后由 cdsfiui 于 2016-12-11 16:10 编辑
有了右值语义和移动, C++11的排序/交换的速度,应该等于或者大于C++03对吧,为此做了一个简单的实验,构造大字符串容器,然后排序。
分别用C++03标准和C++11标准编译和运行,打开O2优化:
- $g++ test.cpp -O2 && ./a.out
- 10240000结束构造
- sort 10240000个元素耗时1.40035秒
- $g++ test.cpp -O2 -std=c++11 && ./a.out
- 10240000结束构造
- sort 10240000个元素耗时2.25684秒
复制代码 ---------------------------------------------------看起来用了C++11反而慢了,这是为何? 我在mac上面,很新的环境
- $gcc -v
- Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
- Apple LLVM version 7.3.0 (clang-703.0.31)
- Target: x86_64-apple-darwin15.6.0
- Thread model: posix
- InstalledDir: /Library/Developer/CommandLineTools/usr/bin
复制代码 ---------------------------------------------------
下面是源代码。
- #include<string>
- #include<algorithm>
- #include<vector>
- #include<cstdlib>
- #include<cstdio>
- #include<iostream>
- #include<ctime>
- using namespace std;
- string randomString()
- {
- const size_t scale=600;
- char ret[scale];
- for(size_t i=0;i<scale;++i)
- {
- double rand0to1=(double)rand()/RAND_MAX;
- ret[i]=(char)rand0to1*92+33;
- }
- return ret;
- }
- int main()
- {
- srand(time(NULL));
- const size_t scale=10240000;
- vector<string> vs;
- vs.reserve(scale);
- for(size_t i=0;i<scale;++i)
- {
- vs.push_back(randomString());
- }
- cout<<vs.size()<<"结束构造\n";
- clock_t begin=clock();
- sort(vs.begin(),vs.end());
- clock_t end=clock();
- double duration=(double)(end-begin)/CLOCKS_PER_SEC;
- cout<<"sort "<<scale<<"个元素耗时"<<duration<<"秒\n";
- return 0;
- }
复制代码
还请各位大侠给个解释啊,迷惑中!
|
|