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

来源:互联网 发布:富兰克林罗斯福知乎 编辑:程序博客网 时间:2024/05/20 19:16
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();
 81  addToListAtEnd();
 82  addToListAtEndClock = clock() - addToListAtEndClock;
 83
 84  std::cout << "List Insertion at the end Process time:" << (double)addToListAtEndClock/CLOCKS_PER_SEC << " sec" << std::endl;
 85
 86  if (addToVectorAtEndClock < addToListAtEndClock) {
 87    std::cout << "Insertion at the end : Vector wins" << std::endl;
 88  }

 89  else {
 90    std::cout << "Insertion at the end : List wins" << std::endl;
 91  }

 92}

 93
 94// Add to Vector anywhere
 95void addToVectorAnywhere() {
 96  // Add to 50000th
 97  std::vector<int>::iterator iter = vector1.begin();
 98
 99  for(int i = 0; i <= 500++i) {
100    ++iter;
101    iter = vector1.insert(iter,i);
102  }

103}

104
105// Add to List anywhere
106void addToListAnywhere() {
107  // Add to 50000th
108  std::list<int>::iterator iter = list1.begin();
109
110  for(int i = 0; i != 500++i) {
111    ++iter;
112    iter = list1.insert(iter,i);
113  }

114}

115
116// Calculate time for adding anywhere
117void addAnywhere() {
118  clock_t addToVectorAnywhereClock = clock();
119  addToVectorAnywhere();
120  addToVectorAnywhereClock = clock() - addToVectorAnywhereClock;
121
122  std::cout << "Vector Insertion anywhere Process time:" << (double)addToVectorAnywhereClock/CLOCKS_PER_SEC << " sec" << std::endl;
123
124  clock_t addToListAnywhereClock = clock();
125  addToListAnywhere();
126  addToListAnywhereClock = clock() - addToListAnywhereClock;
127
128  std::cout << "List Insertion anywhere Process time:" << (double)addToListAnywhereClock/CLOCKS_PER_SEC << " sec" << std::endl;
129
130  if (addToVectorAnywhereClock < addToListAnywhereClock) {
131    std::cout << "Insertion anywhere : Vector wins" << std::endl;
132  }

133  else {
134    std::cout << 
  • 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上面的sz,rz命令与ssh的配合
  • std::vector与std::list的执行速度比较 (C/C++) (STL)
  • 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文件的异同
  • 原创粉丝点击