【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);
}


相关文章
|
11月前
|
算法 编译器 C++
模拟实现c++中的vector模版
模拟实现c++中的vector模版
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
289 2
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
418 7
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1403 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
486 1
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
296 3
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
1400 3
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估

热门文章

最新文章