首页 > 编程语言 >算法笔记0411

算法笔记0411

时间:2024-04-11 11:59:58浏览次数:32  
标签:0411 set register 编译器 笔记 关键字 算法 C++ inline

1.

在C++中,set 是一种关联容器,用于存储已排序的键值对,其中每个键都是唯一的。在上面的代码片段中,set<int> s; 声明了一个整数类型的set,命名为s,它将自动按照元素值进行排序。
set<int>::iterator it; 声明了一个名为it的迭代器,用于遍历set中的元素。迭代器是用于访问容器元素的通用方法,在C++标准库中广泛使用。
使用这个迭代器,你可以进行如下操作:

  • 遍历set中的所有元素。
  • 添加、删除或查找set中的元素。
  • 检查set是否为空。
    下面是一些基本的操作示例:
// 添加元素
s.insert(10);
s.insert(20);
s.insert(30);
// 遍历set
for (it = s.begin(); it != s.end(); ++it) {
    cout << *it << " ";
}
// 查找元素
it = s.find(20);
if (it != s.end()) {
    cout << "Found: " << *it;
} else {
    cout << "Not found";
}
// 删除元素
s.erase(20);
// 检查set是否为空
if (s.empty()) {
    cout << "Set is empty";
} else {
    cout << "Set is not empty";
}

在这个例子中,set会按照元素的值自动排序,所以当你遍历set时,输出将是排序后的元素。如果你尝试插入一个已经存在的值,set将保持不变,因为set中的元素是唯一的。

2.

在C++中,inlineregister是两个关键字,它们用于提供对编译器的提示,以优化函数调用和变量的存储。

inline 关键字

inline关键字用于声明内联函数。当你在函数声明前加上inline关键字时,你是在建议编译器在调用该函数的地方直接展开函数体,而不是通过普通函数调用的方式。这样可以减少函数调用的开销,特别是对于那些只有几行代码的短小函数。

inline int add(int a, int b) {
    return a + b;
}

在上面的例子中,add函数被声明为内联的。这意味着每次调用add函数时,编译器都会将函数体中的代码直接插入到调用点,而不是生成一个函数调用的指令。

register 关键字

register关键字用于建议编译器将变量存储在CPU的寄存器中,而不是在内存中。这通常用于那些频繁读写的小变量,以减少访问内存的时间。然而,现代编译器非常智能,它们会自动决定哪些变量应该存储在寄存器中,因此register关键字在现代C++编程中已经不那么常用了。

register int i;

在上面的例子中,i被声明为register类型。这只是一个提示,编译器可能会忽略这个提示,根据实际情况决定是否将变量存储在寄存器中。
需要注意的是,register关键字不能用于声明数组和结构体类型,也不能用于带有auto, static, externvolatile关键字的变量声明中。
在现代C++编程中,register关键字的使用已经被废弃,因为编译器优化已经足够好,能够自动做出最优的决策。而inline关键字虽然仍然有用,但是在C++11及其之后的版本中,编译器可以通过函数的定义自动推断出哪些函数应该是内联的,因此inline关键字的使用也变得不那么必要了。

标签:0411,set,register,编译器,笔记,关键字,算法,C++,inline
From: https://www.cnblogs.com/rexaron/p/18128713

相关文章

  • 人工智能_大模型030_大模型开发框架003_Semantic Kernel中Native Function嵌套调用_SK
    ###4.2、NativeFunction嵌套调用(选)**注意:**NativeFunction的嵌套调用,本质上就是函数嵌套。官方给的写法是在Kernel的设计思想下的实现,通过Kernel来获取函数并执行,观感上较为晦涩。实际开发中,可以根据个人对SK内核与设计理念的理解,自行选择使用以下写法,或使用普......
  • org.apache.commons.lang3.ArrayUtils 学习笔记
    1234567891011121314151617181920212223242526272829303132333435package com.nihaorz.model; /** *@作者王睿 *@时间2016-5-17上午10:05:17 * */public class Person{    private Stringid;    pr......
  • 排序算法(c语言版)
    排序算法(c语言版)1、插入排序#include<stdio.h>//插入排序,升序voidinsertion_sort(intarr[],intlen){inti,j,key;for(i=1;i<len;i++){key=arr[i];//arr[i]为待插入的元素,保存在key中j=i-1;wh......
  • Capl语言 CRC算法大全
    CRC网站CRC计算器(好用)CRC16-CCITTwordCRC_16_CCITT(bytedata[],bytelen){stackinti=0;stackintindex=0;wordcrc16=0x0000;while(len--){for(i=0x80;i!=0;i>>=1){if((crc16&0x8000)!=0){......
  • 数据结构与算法引言
    数据结构与算法引言数据结构和算法是计算机专业重要的基础课程。数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法简单来说就是解决问题的步骤。有了一个个数据结构和算法,我们可以编写出高质量的代码,高性能的产品。数据结构数......
  • C语言简单的数据结构:单链表的有关算法题(1)
    算法题重点在于思路,代码其实并不难,这里的每一题都提供多种思路,大家可以动手写一下,并找到更好的解题方法这里先介绍前三道题目:1.单链表相关经典算法OJ题1:移除链表元素2.单链表相关经典算法OJ题2:反转链表3.单链表相关经典算法OJ题4:链表的中间结点1.单链表相关经典算......
  • 算法模板 v1.12.2.20240411
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • GPS轨迹压缩之Douglas-Peucker算法
    前言最近在做的IOT平台涉及到画轨迹线的业务。谈到轨迹线,设备上报上来的数据量巨大,甚至活跃的设备一天上报来的数据都甚至几十万。前端没法对这个数据去处理进行画线取轨迹图像。所以就有了轨迹压缩。轨迹压缩算法轨迹压缩算法分为两大类,分别是无损压缩和有损压缩,无损压缩算法......
  • Springcloud学习笔记63---RocketMq超时重试,导致重复消费的问题,解决方案
    1.重复消费的背景当Consumer处理时间过长,在超时时间内没有返回给Broker消费状态,那么Broker也会自动重试。设定一个超时时间,达到超时时间的那个消费当作消费失败处理。Java客户端中的DefaultPushConsumer中的构造方法中的consumeTimeout字段(默认15分钟)。packagewilliam.rmq.......
  • C# 基础语法 学习笔记
    1.C#基础语法1.1 泛型泛型是C#推出的一个重要语法,泛型允许在编写方法或类是定义一些未确定的类型参数。它提供了类型安全且高效的数据结构和算法,同时也可以避免装箱和拆箱操作,提高代码的复用性(编程时,出现相似的模块,这加大我们的工作量,如果使用泛型可以让多个类型共享一组......