【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天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
3天前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
3天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
3天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
3天前
|
编译器 C++
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
25天前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
19 6
|
1月前
|
Java
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总
|
1月前
|
安全 Java API
Java并发 - J.U.C并发容器类 list、set、queue
Queue API 阻塞是通过 condition 来实现的,可参考 Java 并发 - Lock 接口 ArrayBlockingQueue 阻塞 LinkedBlockingQueue 阻塞 ArrayQueue 非阻塞 LinkedQueue 非阻塞
|
1月前
|
存储 安全 Java
【Java】集合(一)单列集合List
【Java】集合(一)单列集合List
22 0

热门文章

最新文章