【C++】STL容器——探究List与Vector在使用sort函数排序的区别(14)

简介: 【C++】STL容器——探究List与Vector在使用sort函数排序的区别(14)

一、Sort函数介绍

1.Sort函数接口

注意:

  • Compare comp 参数可以决定是【 正序 】还是【 逆序 】

2.Sort函数接口使用(代码演示)

int a[] = { 16,2,77,29 };
  vector<int> v5(a, a+4);
  for (auto e : v5)
  {
    cout << e << " ";
  }
  cout << endl;
  // 升序 < 
  // less
  sort(v5.begin(), v5.end());
  //sort(v5.rbegin(), v5.rend());
  for (auto e : v5)
  {
    cout << e << " ";
  }
  cout << endl;
  // 降序 >
  //greater<int> gt;
  //sort(v5.begin(), v5.end(), gt);
  sort(v5.begin(), v5.end(), greater<int>());
  for (auto e : v5)
  {
    cout << e << " ";
  }
  cout << endl;
  //void(*func)(); 本质上是函数指针
  sort(str.begin(), str.end());
  cout << str << endl;
  sort(a, a+4);
  for (auto e : a)
  {
    cout << e << " ";
  }
  cout << endl;
}

二、vector和list分别的Sort函数区别

【1】vector和list分别的Sort函数解析

区别:

  1. 使用上: list的sort使用更方便lt2.sort();;vector分前后,要找迭代器sort(v.begin(), v.end());
  2. 效率上:在处理少量数据时候,vector的list的sort效率差不多;处理大量数据,vector要优于list;

【2】vector和list分别的Sort函数使用(代码演示)

说明

  • 下面函数是设置N为数据量,然后分先后记录了vector和list排序一段相同数据所需的时间
  • 最后得出【1】中结论:在处理少量数据时候,vector的list的sort效率差不多;处理大量数据,vector要优于list;
void test_op()
{
  srand(time(0));
  const int N = 100000;
  vector<int> v;
  v.reserve(N);
  list<int> lt1;
  list<int> lt2;
  for (int i = 0; i < N; ++i)
  {
    auto e = rand();
    lt2.push_back(e);
    lt1.push_back(e);
  }
  // 10:35继续
  // 拷贝到vector排序,排完以后再拷贝回来
  int begin1 = clock();//clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t
  // 先拷贝到vector
  for (auto e : lt1)
  {
    v.push_back(e);
  }
  // 排序,验证vector的sort的排序效率
  sort(v.begin(), v.end());
  // 拷贝回去,验证list的sort的排序效率
  size_t i = 0;
  for (auto& e : lt1)
  {
    e = v[i++];
  }
  int end1 = clock();
  int begin2 = clock();
  lt2.sort();
  int end2 = clock();
  printf("vector sort:%d\n", end1 - begin1);
  printf("list sort:%d\n", end2 - begin2);
}


相关文章
|
3月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
27天前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
40 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
27天前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
44 5
|
27天前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
44 2
|
2月前
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
33 0
|
3月前
|
存储 Java 索引
|
3月前
|
Java
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
这篇文章阐述了Java泛型中的List<? super T>和List<? extends T>的区别,解释了通配符的使用规则,以及Java泛型设计原则确保了编译时无警告则运行时无ClassCastException异常。
|
3月前
|
安全 编译器 容器
C++STL容器和智能指针
C++STL容器和智能指针
|
13天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
19 4
|
13天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
16 4