首页 > 编程语言 >算法小笔记0424

算法小笔记0424

时间:2024-04-24 09:00:44浏览次数:20  
标签:GCC nums 0424 元素 笔记 算法 multiset 排序 优化

1

在 C++ 中,multiset 是一种容器适配器,它允许存储多个具有相同键的元素。它是 set 的一个变体,与 set 不同的是,multiset 允许重复的元素。multiset 中的元素按照特定的排序标准自动排序,这个排序标准是在容器创建时指定的。
下面是一个使用 multiset 的简单示例:

#include <iostream>
#include <set>
using namespace std;

int main() {
    // 创建一个 multiset,其中存储的元素将按照内置的 lessThan 函数自动排序
    multiset<int> nums;

    // 添加一些元素
    nums.insert(3);
    nums.insert(1);
    nums.insert(4);
    nums.insert(1); // multiset 允许重复元素

    // 输出 multiset 中的元素
    for (const int num : nums) {
        cout << num << ' ';
    }
    cout << endl;

    // 删除所有的 1
    nums.erase(1);

    // 再次输出 multiset 中的元素
    for (const int num : nums) {
        cout << num << ' ';
    }
    cout << endl;

    return 0;
}

在这个示例中,我们创建了一个 multiset 来存储整数。我们添加了一些整数,包括重复的 1。由于 multiset 会自动排序,所以输出时元素是按照升序排列的。然后我们删除了所有的 1,并再次输出剩余的元素。
multiset 的主要特点是:

  • 元素按照排序标准自动排序。
  • 元素可以重复。
  • 插入和删除操作通常是对数时间复杂度。
  • 不允许通过迭代器直接修改元素值,因为这会破坏元素的排序顺序。
    multiset 通常在需要快速查找、插入和删除,并且不需要唯一性保证的情况下使用。

2

在 C++ 中,#pragma GCC optimize(2) 是一个编译指示,用于告诉 GCC 编译器以特定的优化级别编译代码。这个指示是 GCC 特有的,不会在其他编译器中产生效果。
#pragma GCC optimize 指示可以接受多个参数,其中 2 表示的是一个特定的优化级别。GCC 的优化级别通常从 03,其中 0 表示没有优化(-O0),1 表示一级优化(-O1),2 表示二级优化(-O2),3 表示三级优化(-O3)。这些优化级别会逐渐增加编译器对代码执行的优化程度,可能会包括循环展开、函数内联、指令重排等。
下面是一个使用 #pragma GCC optimize(2) 的示例:

#include <iostream>
int main() {
    // 告诉 GCC 使用二级优化
    #pragma GCC optimize(2)
    // 你的代码
    int sum = 0;
    for (int i = 0; i < 1000000; ++i) {
        sum += i;
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

在这个示例中,我们告诉 GCC 对 main 函数中的代码使用二级优化。这可能会使得这段代码运行得更快,因为编译器会尝试优化循环和相关的计算。
需要注意的是,优化级别 2 通常是一个很好的平衡点,因为它提供了适度的优化而不会像 3 那样可能导致编译时间显著增加或代码大小显著增大。然而,优化并不总是能够提高程序的运行速度,有时候它可能会导致代码大小增加或者特定情况下的性能下降。因此,在使用优化时,应该对程序的性能进行测试,以确保优化确实带来了预期的效果。

标签:GCC,nums,0424,元素,笔记,算法,multiset,排序,优化
From: https://www.cnblogs.com/rexaron/p/18154295

相关文章

  • chakra-ui学习笔记(一)
    前言:发现chakra-ui也不错,虽然比起antd功能稍少一点。 1,Stack与Flex区别NotesonStackvsFlex#TheStackcomponentandtheFlexcomponenthavetheirchildrenspacedoutevenlybutthekeydifferenceisthattheStackwon'tspantheentirewidthofthecontainer......
  • 链表(考研算法)
    数据结构链表练习题:1.已知,一个带有头结点的单链表,结点结构为:假设该链表只给出了头指针head。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。/**************************......
  • Android开发笔记[18]-使用本地模块
    摘要将摄像头预览页面封装到Android模块中并在app中使用这个本地模块.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk26targetSdk34compileSdk34开发语言:K......
  • Java SE 笔记搬运
    本科过过两遍JavaSE,但是由于考研等不可抗力因素很久未接触代码,因工作需求这里将四年前的Java笔记重新整理搬运,方便Java学习。——————————————————————————————————————————————————————————————继承/*私有化的......
  • python爬虫—学习笔记-4
    课堂内容:删除原导出文件的venv,pycham打开此文夹,重新创建本地虚拟编译器。安装依赖库,打开pycham终端输入pipinstall-ryilaiku.txt,安装依赖库中的库。继续安装bs4、lxml库,命令为:pipinstallbs4和pipinstalllxml。安装好后,pycham来到spiders目录下,新建Python......
  • [哈工大软件工程期末考试] 《软件过程与项目管理》复习笔记
    软件过程与项目管理复习第一章:软件及软件工程软件的概念什么是软件?软件是一组对象或项目所形成的一个“配置”,由程序、文档、数据等部分构成。软件的四大特性复杂性不可见性易变性一致性软件工程的发展软件的发展阶段第一阶段主要用于数值计算的需求完全依......
  • 《向上生长》读书笔记
    Title:《向上生长》Author:九边Genre:个人成长;情绪;心灵;Rating:❤️❤️❤️Date:2021-01-08总结《向上生长》卖的就是基于阅历的信息差像这种价值观输出的书籍,能让年轻人看得入迷的一个重要原因是:基于读者和作者之间阅历差距而产生的信息差,年轻读者一看到这些内容仿佛打开了新世界的......
  • 【JAVA】助力数字化营销:基于协同过滤算法实现个性化商品推荐
    ​​周松杰:碧桂园服务后台开发gao级工程师,拥有8年开发经验。1前言本文主要介绍基于协同过滤的推荐算法。在了解实践应用之前,我们先对推荐系统、Mahout学习框架以及算法进行简单介绍,然后再结合实践进行深入探讨。第一部分概述了推荐系统的产生背景、作用和工作原理,并介绍了Ma......
  • 【编译原理】原理笔记
    随便记点防止期末烂掉语法分析直接左递归的消除实际就是左递归转右递归法1:直接替换\[A\rightarrowA\alpha|\beta\Rightarrow\begin{cases}A\rightarrow\betaA',\\A'\rightarrow\alphaA'|\epsilon\end{cases}\]法2:矩阵法前置知识:\[I=\begin{pmatrix}\epsilo......
  • 分类算法(Classification Algorithm)需求记录
    [toc]比如说,在WEB扫描器场景中。一个扫描器在扫描过程中,它可以自动识别接口类型并采用相应分类规则进行漏洞检测的算法,这种通常属于一种称为"智能扫描"(IntelligentScanning)或"漏洞扫描引擎"的技术。这些算法利用机器学习、深度学习和模式识别等技术,通过分析网络流量、响应内容......