vector 测试
tubo
posted @ 2014年9月03日 16:11
in 未分类
, 676 阅读
写个简单的东西来测试一下数据很多时候几种创建 vector 的方法,结果有点意思:
#include <iostream> #include <sys/time.h> #include <vector> using namespace std; typedef unsigned int uint32; struct Obj { Obj(int a1, int b1, int c1) : a(a1), b(b1), c(c1) {} Obj(){}; int a; int b; int c; }; static inline uint32 get_timems() { struct timeval tv; return gettimeofday(&tv, NULL) == 0 ? \ (tv.tv_sec * 1000 + tv.tv_usec / 1000):0; } #define N 10000000 #define LOG(X) printf(X ", costs: %u msecs\n", get_timems() - ts); #define ITS() ts=get_timems() int main(int argc, char *argv[]) { uint32 ts = get_timems(); vector<Obj> v; for (int i = 0; i < N; ++i) { v.push_back(Obj(i, i-1, i-2)); } LOG("Create and push_back"); ITS(); vector<Obj> v4; vector<Obj>::const_iterator iter = v.begin(); vector<Obj>::const_iterator end = v.end(); for (; iter != end; ++iter) { Obj o(iter->a, iter->b * 2, iter->c * 3); v4.push_back(o); } LOG("Create and modify and push_back"); ITS(); vector<Obj> v5; v5.resize(N); for (int i = 0; i < N; ++i) { v5[i].a = v[i].a; v5[i].b = v[i].b*2; v5[i].c = v[i].c*3; } LOG("Resize and modify"); ITS(); vector<Obj> v6; v5.reserve(N); for (int i = 0; i < N; ++i) { v6.push_back(Obj (iter->a, iter->b * 2, iter->c * 3)); } LOG("Reserver and push_back"); return 0; }
输出如下:
Welcome to the Emacs shell ~/tmp $ ~/tmp $ ./test Create and push_back, costs: 1057 msecs Create and modify and push_back, costs: 1244 msecs Resize and modify, costs: 447 msecs Reserver and push_back, costs: 1181 msecs
(转载请注明出处,使用许可:署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 。)
2022年5月22日 22:46
The travel addict inside you is craving for new adventure? Things to do post will suggest you the new destination for your next journey with all the best spots around the world.