std::vector与std::list的执行速度比较 (C/C++) (STL)

来源:互联网 发布:富兰克林罗斯福知乎 编辑:程序博客网 时间:2024/05/20 20:18
STL中的container各有专长,最常用的是std::vector,可以完全取代array,第二常用的是std::list。std::vector的优点在于non-sequential access超快,新增数据于数据后端超快,但insert和erase任意资料则相当缓慢;std::list则是insert和erase速度超快,但non-sequential access超慢,此范例以实际时间比较vector和list间的优缺点。

  1/* 
  2(C) OOMusou 2006 http://oomusou.cnblogs.com
  3
  4Filename    : VectorVsList.cpp
  5Compiler    : Visual C++ 8.0
  6Description : Demo the performance difference between std::vector and std::list
  7*/

  8#include <iostream>
  9#include <ctime>
 10#include <vector>
 11#include <list>
 12
 13// Add to Vector at end
 14void addToVectorAtEnd();
 15// Add to List at end
 16void addToListAtEnd();
 17// Calculate time for adding to end
 18void addToEnd();
 19
 20// Add to Vector anywhere
 21void addToVectorAnywhere();
 22// Add to List anywhere
 23void addToListAnywhere();
 24// Calculate time for adding anywhere
 25void addAnywhere();
 26
 27// Remove from Vector anywhere
 28void removeFromVectorAnywhere();
 29// Remove from List anywhere
 30void removeFromListAnywhere();
 31// Calculate time for removing anywhere
 32void removeAnywhere();
 33
 34// Non-sequential access to Vector
 35void nonSequentialAccessToVector();
 36// Non-sequential access to List
 37void nonSequentialAccessToList();
 38// Caculate time for non-sequential access to 
 39void nonSequentialAccess();
 40
 41std::vector<int> vector1;
 42std::list<int>   list1;
 43
 44int main() {
 45  // Calculate time for adding to end
 46  addToEnd();
 47
 48  // Calculate time for adding anywhere
 49  addAnywhere();
 50
 51  // Calculate time for removing anywhere
 52  removeAnywhere();
 53
 54  // Caculate time for non-sequential access to 
 55  nonSequentialAccess();
 56}

 57
 58// Add to Vector at end
 59void addToVectorAtEnd() {
 60  for(int i=0; i != 1000000++i) {
 61    vector1.push_back(i);
 62  }

 63}

 64
 65// Add to List at end
 66void addToListAtEnd() {
 67  for(int i=0; i != 1000000++i) {
 68    list1.push_back(i);
 69  }

 70}

 71
 72// Calculate time for adding to end
 73void addToEnd() {
 74  clock_t addToVectorAtEndClock = clock();
 75  addToVectorAtEnd();
 76  addToVectorAtEndClock = clock() - addToVectorAtEndClock;
 77
 78  std::cout << "Vector Insertion at the end Process time:" << (double)addToVectorAtEndClock/CLOCKS_PER_SEC << " sec" << std::endl;
 79
 80  clock_t addToListAtEndClock = clock();
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • std vector与std list的效率比较
  • std vector与std list的效率比较
  • 【语言-C++】STL std::list的使用
  • 【c++】std vector的介绍
  • C++-std::Vector
  • C/C++字符串处理(4):std::vector与std::StringBuilder
  • C/C++字符串处理:std::vector与std::StringBuilder
  • std::vector,std::deque,std::list的区别的使用
  • std::set, std::list, std::vector在erase的区别
  • std::vector和std::list访问元素的速度真的很慢吗?
  • C++/STL std::string 的用法
  • [C/C++标准库]_[初级]_[std::deque和std::vector比较]
  • Linux 下获取某虚拟地址对应的页表信息
  • Linux(Fedora和Ubuntu等)下android真机调试
  • 2010年的最后一周
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • DVT和ADVT - 为数不多的DICOM测试工具说明AND下载
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • Dcmtk 在 PACS 开发中的应用
  • 床边数字x线机--概念机
  • 使用网上邻居传文件
  • 正反说QT
  • Spring 调度任务
  • 使用内存映射比较两个wave文件的异同
  • xv6内存布局详解
  • 把它发给你最爱的人吧!真的很好啊. 
  • 原创粉丝点击