c++的函数reserve()和unique()和sort()

2023-05-16

函数reserve

// vector::reserve
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int>::size_type sz;

  std::vector<int> foo;
  sz = foo.capacity();
  std::cout << "making foo grow:\n";
  for (int i=0; i<100; ++i) {
    foo.push_back(i);
    if (sz!=foo.capacity()) {
      sz = foo.capacity();
      std::cout << "capacity changed: " << sz << '\n';
    }
  }

  std::vector<int> bar;
  sz = bar.capacity();
  bar.reserve(100);   // this is the only difference with foo above
  std::cout << "making bar grow:\n";
  for (int i=0; i<100; ++i) {
    bar.push_back(i);
    if (sz!=bar.capacity()) {
      sz = bar.capacity();
      std::cout << "capacity changed: " << sz << '\n';
    }
  }
  return 0;
}

结果:
making foo grow:
capacity changed: 1
capacity changed: 2
capacity changed: 4
capacity changed: 8
capacity changed: 16
capacity changed: 32
capacity changed: 64
capacity changed: 128
making bar grow:
capacity changed: 100

这个和vector a(100)的区别在于用了reserve之后只有这个容器满了才会二倍扩容,而后者在容器达到一个值(好像是三分之一),就会自动二倍扩容,这样容器一定是比内容大不少


std::unique()

该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素,注意

  1. 这里的去除并非真正意义的erase,而是将重复的元素放到容器的末尾,返回值是去重之后的尾地址。
  2. unique针对的是相邻元素,所以对于顺序顺序错乱的数组成员,或者容器成员,需要先进行排序,可以调用std::sort()函数
#include <iostream>
#include <algorithm>

int main(void)
{
    int a[8] = {2, 2, 2, 4, 4, 6, 7, 8};
    int c;

    //std::sort(a, a + 8);
    //对于无序的数组需要先排序
    //但是无序数组也是可以用的,一般使用场景是有序数组
    //同时容器内也可以使用

    c = (std::unique(a, a + 8) - a );
    //返回值是最后一个元素的地址,重复的放在后面
    //所以使用完之后内存的大小是不变的

    std::cout<< "c = " << c << std::endl;

    //打印去重后的数组成员
    for (int i = 0; i < c; i++)
        std::cout<< "a = [" << i << "] = " << a[i] << std::endl;

    return 0;
}

sort()和unique()的参数都是第一个元素地址,最后一个元素地址,然后都是包头不包尾,即最后一个元素不参与去重和排序
然后vector的end()函数输出的是元素最后一个元素的下一个元素地址,正好可以放在这个里面用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++的函数reserve()和unique()和sort() 的相关文章

  • yq (GO/Mike Farah) 递归地唯一化所有数组

    这可能与我发布的另一个问题有关 yq GO Mike Farah 对所有数组进行递归排序 https stackoverflow com questions 73746627 yq go mike farah sort all arrays
  • MySQL 和 php 中独特的文本字段

    我使用以下方法创建了盐 md5 兰特 0 10000000 可能有更好的方法吗 MYSQL 中似乎无法使文本字段唯一 那么如何检查盐是否已经被以前的用户使用过呢 或者我应该根据当前日期 时间生成盐 因为 2 个用户不可能同时注册 对吗 对于
  • 协会类别的独特性

    我很难理解 UML 2 5 规范中解释的关联类的概念 最让我困惑的是下面这句话 摘自199页 笔记 即使当 AssociationClass 的所有末端都具有 isUnique true 时 也可能有多个实例关联末端类的同一组实例 正如这里
  • R:具有重复时间索引条目的时间序列

    我是 R 的 n00b 和堆栈溢出的 n00b 刚刚加入 所以如果我未能使用标记 我不知道 或错过了自述文件中的某些内容 请原谅我 如果您不介意 我将在这里解决我的完整问题 因为也许您可能会好心地告诉我应该如何最好地解决这个问题 Stage
  • ES6 中使用 Set 的不重复的文字对象数组

    从那时起 获取没有重复项的数组的代码变得很优雅ES6 new Set array 就是这样 但是 这仅在数组包含原始数据类型 字符串 布尔值 数字 的元素时删除重复项 一组对象文字怎么样 如何在不重复的情况下使其工作 使用与上面使用的语法接
  • 删除结构 C++ 向量中的重复项

    我有以下结构 我想将结构存储在向量中 其次我想删除 context 我究竟做错了什么 include
  • 位列的唯一约束仅允许 1 个真 (1) 值

    我有这张表 CREATE TABLE tblExample ExampleID int IDENTITY 1 1 NOT NULL WordsAndStuff nvarchar max NOT NULL Active bit NOT NUL
  • 在 C 中查找列表的基数

    我怎样才能只找到列表中出现一次的元素并返回基数 例如 如果我的列表由 3 2 1 1 2 4 组成 我期望返回计数器为 4 而不是6 因为我们不计算重复的数字 这是我到目前为止编写的代码 struct Node int data struc
  • 如何生成从集合中选取的 n 个唯一元素的列表?

    如何生成n个列表unique值 Gen List T 使用 ScalaCheck 从一组值 不是生成器 中获取 这个帖子 https stackoverflow com questions 5107281 generating permut
  • 在一个逗号分隔的单元格中显示所有匹配的值

    我的 Excel 2010 电子表格中有两列数据 A 列中是一个类别 B 列中是一个值 对于 A 列中的每个唯一类别 B 列中将有多个值 我想在单独的工作表中实现的目标是在一个逗号 或分号等 分隔的单元格中显示每个唯一类别的所有值 例如 如
  • 子图有相同的节点,如何使其唯一

    我通过 perl 脚本创建点文件 这是包含相同节点的子图 例如 subgraph aa gt bb gt cc subgraph dd gt bb gt ee 我知道这些子图使用相同的命名空间 所以我的结果输出很混乱 在每个子图中 我可以使
  • PHP - 使关联数组唯一,键 -> 值和值 -> 键

    我在 php 中遇到了一个小问题 我发现很难用语言解释 我有一个包含键值的关联数组 我想创建一个函数 或者如果已经有一个函数 它将接受一个数组作为输入并删除重复项 但两种方式都是如此 例如 在我的数组中 我有 a gt b a gt c b
  • 查询超慢...我做错了什么?

    你们太棒了 在过去的几天里 我已经在这里发帖两次 作为一个新用户 我对这些帮助感到震惊 因此 我想我应该采用软件中最慢的查询 看看是否有人可以帮助我加快速度 我使用此查询作为视图 因此速度快很重要 但事实并非如此 首先 我有一个联系人表 用
  • 如何在 Google Cloud Firestore 中强制文档字段属性的唯一性

    我有以下数据 如图所示 我想确保用户名字段是唯一的 我怎样才能强制执行呢 请记住 我的文档 ID 已经是唯一的 我不想使用我的用户名作为文档 ID 无法在 Firestore 中强制执行字段的唯一值 您可以保证的唯一唯一性是集合中的文档 I
  • 在Java中生成随机唯一的双精度值

    我需要一个 64 位浮点随机数的集合 并且它们应该是不同的 是否有为此的库例程 或者我应该手动搜索重复项 实际上 让数字不接近比一些非常小的常数 更重要 图书馆也有这样的例程吗 您可以使用streams为了那个原因 double array
  • postgresql 分区上的唯一索引

    我有一个名为 cdrs 的表 CREATE TABLE cdrs i cdr bigint NOT NULL i cdrs connection bigint NOT NULL i call bigint NOT NULL customer
  • 关于在序列中的 xsi:type 上使用 xs:unique

    元素的类型可以有唯一的约束吗 假设我有一艘诺亚方舟 其中 Animal name 必须是唯一的 下面是一个未根据架构进行验证的 XML
  • rand() 在 C 语言中有多独特?

    我在用rand 对于需要唯一值的 6 位字段 我做对了吗 几率有多大 rand 可以在连续或频繁的通话中给我类似的值吗 当我使用 rand 时 它是独一无二的 但是 当我打电话时返回相同的号码srand time NULL or srand
  • java for 循环执行太快导致 System.currentTimeMillis() 重复

    Java 我在使用 System currentTimeMillis 函数时遇到问题 我正在使用 System currentTimeMillis 在 foo 循环中生成唯一值 问题是循环执行太快 而 System currentTimeM
  • OAuth 2.0 令牌对于提供商来说永远是唯一的吗?

    当 OAuth 2 0 提供商颁发令牌时 该令牌值对于提供商而言是否永远是唯一的 或者是否有可能在未来的某个时候 大概在令牌过期后 可能会为不同的用户发行具有相同值的另一个令牌 在搜索中 我发现了很多有关令牌过期的信息 但没有关于该令牌值将

随机推荐

  • 自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第二部分

    我的学习心得 xff0c 我认为能不能自学成功的要素有两点 第一点就是自身的问题 xff0c 虽然想要转行学习Java的人很多 xff0c 但是非常强烈的想要转行学好的人是小部分 而大部分人只是抱着试试的心态来学习Java xff0c 这是
  • 深入理解任务堆栈以及堆栈溢出

    前言 xff1a 在多任务操作系统中创建任务时 xff0c 都需要指定该任务的堆栈大小 xff0c 那么这个堆栈的作用时什么呢 xff1f 什么情况下需要用到堆栈 xff0c 以及大小不够时会产生什么异常呢 xff1f 1 任务状态 简单分
  • 计算机网络的166个概念你知道几个 第四部分

    HTML xff1a HTML 称为超文本标记语言 xff0c 是一种标识性的语言 它包括一系列标签 xff0e 通过这些标签可以将网络上的文档格式统一 xff0c 使分散的 Internet 资源连接为一个逻辑整体 HTML 文本是由 H
  • 15000 字的 SQL 语句大全 第一部分

    一 基础 1 说明 xff1a 创建数据库CREATE DATABASE database name 2 说明 xff1a 删除数据库drop database dbname 3 说明 xff1a 备份sql server 创建 备份数据的
  • 毕业设计源码基于springboot的旧物置换系统的实现

    摘 要 随着时代在一步一步在进步 xff0c 旧物也成人们的烦恼 xff0c 许多平台网站都在推广自已的产品像天猫 咸鱼 京东 所以开发出一套关于旧物置换网站成为必需 旧物置换网站主要是借助计算机 xff0c 通过对用户进行管理 为减少管理
  • 毕业设计源码基于Spring Boot的论坛管理系统的实现

    摘要 xff1a 在社会快速发展的影响下 xff0c 论坛管理系统 继续发展 xff0c 使 论坛管理系统 的管理和运营比过去十年更加 信息化 依照这一现实为基础 xff0c 设计一个快捷而又方便的网上 论坛管理系统 是一项十分重要并且有价
  • 毕业设计源码基于Spring Boot的旅游管理系统的实现

    摘 要 社会的发展和科学技术的进步 xff0c 互联网技术越来越受欢迎 网络计算机的 交易 方式逐渐受到广大人民群众的喜爱 xff0c 也逐渐进入了每个 用户 的使用 互联网具有便利性 xff0c 速度快 xff0c 效率高 xff0c 成
  • 轮询、中断和DMA三种方式的原理和联系

    CPU控制外部设备的方式 xff1a 中断 轮询 DMA 轮询中断DMA 由于外部设备的速度差异 xff0c CPU可以使用不同的方式控制外部设备的访问 常见的方式轮询 中断和DMA 轮询 轮询最简单 xff0c CPU通过不断地查询某个外
  • OpenMV识别色块与STM2F4通过串口通信

    花了三天时间学习了一下OpenMV的简单使用 xff0c 在这写个博客记录一下 xff0c 并且上传自己的代码 xff0c 以方便交流学习 第一次发帖 xff0c 不周之处见谅 首先概括一下我实现的功能 xff1a OpenMV识别红色色块
  • c++语言简单提问

    1 定义一个空的类型 xff0c 里面没有任何成员变量和成员函数 对该类型求sizeof xff0c 得到的结果是 1 2 为什么不是0 空类型的实例中不包含任何信息 xff0c 本来求sizeof应该是0 xff0c 但是当我们声名该类型
  • 二 ROS通信机制-话题通信(发布订阅模式)

    二 ROS通信机制 话题通信 发布订阅模式 ROS 中的基本通信机制2 1话题通信 发布订阅模式 2 1 1概念2 1 2作用2 1 3 理论模型2 1 4 话题通信应用时需要关注的地方 xff1a 3 简单实现3 1ROS工作空间建立 x
  • 解决ROS中运行launch文件报错ERROR: cannot launch node of type[xxx/xxx]:xxx的问题

    解决ROS中运行launch文件报错ERROR cannot launch node of type xxx xxx xxx的问题 错误截图 xff1a 原因 xff1a 解决方式 xff1a 当时我出现的错误是 ERROR cannot
  • c++ stl 五种迭代器

    c 43 43 stl 五种迭代器 2010 12 31 14 22 25 分类 xff1a C 43 43 C 举报 字号 订阅 下载LOFTER 我的照片书 迭代器的分类 Iterator Categories I
  • C语言头文件中定义变量问题(转)

    上个星期回学校的时候 xff0c 刚好碰到一个学弟在写程序 xff0c 并且刚好碰到一个总编不过去的问题 xff0c 我看了看 xff0c 正好是个头文件重复包含问题 xff0c 问题描述如下 xff1a 他在程序中建立了一个global
  • Opencv Aruco识别(python)

    效果图 先上效果 代码 直接上代码 xff1a span class token operator span span class token operator span usr span class token operator span
  • Windows下Cmake安装步骤详解(图文)

    文章目录 Cmake介绍Cmake下载及安装 Cmake介绍 CMake是一个跨平台的安装 xff08 编译 xff09 工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 xff0c 并且输出对应的makefile或者pro
  • C语言:通过指针模拟实现strcat函数

    模拟实现strcat strcat函数的功能 把src所指向的字符串 xff08 包括 0 xff09 复制到dest所指向的字符串后面 xff08 删除dest原来末尾的 0 xff09 要保证dest足够长 xff0c 以容纳被复制进来
  • C语言中将字符串拆分再进行拼接

    我们有时候需要对于字符串进行操作 xff0c 主要用到strcat和strtok两个函数 xff0c 因此记录下这次的操作方式以便之后查阅 span class token macro property span class token d
  • 并行编程实现矩阵乘法优化

    实现四种矩阵乘法程序 xff0c 并对比运行效率 1 xff09 串行算法 2 xff09 Catch优化 3 xff09 SSE版本 4 xff09 分片策略 span class token macro property span cl
  • c++的函数reserve()和unique()和sort()

    函数reserve span class token comment vector reserve span span class token macro property span class token directive keywor