当前位置: 首页 > news >正文

c++STL容器的使用(vector, list, map, set等),c++STL算法的理解与使用(sort, find, binary_search等)

c++STL容器的使用(vector, list, map, set等)
在C++的STL(Standard Template Library)中,容器是重要的一部分,它们提供了各种数据结构来存储和管理数据。以下是一些常见的STL容器及其使用方法的简要说明:

  1. Vector(向量)
    std::vector 是一个动态数组,可以动态地添加和删除元素。
#include <vector>  
#include <iostream>  int main() {  // 创建一个空的vector  std::vector<int> vec;  // 向vector中添加元素  vec.push_back(1);  vec.push_back(2);  vec.push_back(3);  // 访问元素  std::cout << "First element: " << vec[0] << std::endl;  // 遍历vector  for (const auto& elem : vec) {  std::cout << elem << " ";  }  // 删除元素  vec.pop_back(); // 删除最后一个元素  return 0;  
}
  1. List(列表)
    std::list 是一个双向链表,提供了高效的插入和删除操作。
#include <list>  
#include <iostream>  int main() {  // 创建一个空的list  std::list<int> lst;  // 向list中添加元素  lst.push_back(1);  lst.push_front(0);  // 遍历list  for (const auto& elem : lst) {  std::cout << elem << " ";  }  // 删除元素  lst.remove(1); // 删除所有值为1的元素  return 0;  
}
  1. Map(映射)
    std::map 是一个关联容器,它存储的元素是键值对,并按键进行排序。
#include <map>  
#include <iostream>  int main() {  // 创建一个空的map  std::map<std::string, int> m;  // 向map中添加元素  m["apple"] = 1;  m["banana"] = 2;  // 访问元素  std::cout << "Apple count: " << m["apple"] << std::endl;  // 遍历map  for (const auto& pair : m) {  std::cout << pair.first << ": " << pair.second << std::endl;  }  // 删除元素  m.erase("banana"); // 删除键为"banana"的元素  return 0;  
}
  1. Set(集合)
    std::set 是一个关联容器,它存储的元素是唯一的,并按值进行排序。
#include <set>  
#include <iostream>  int main() {  // 创建一个空的set  std::set<int> s;  // 向set中添加元素  s.insert(1);  s.insert(2);  s.insert(1); // 这个元素不会被插入,因为set中不允许重复  // 遍历set  for (const auto& elem : s) {  std::cout << elem << " ";  }  // 删除元素  s.erase(1); // 删除值为1的元素  return 0;  
}

在使用这些STL容器时,通常会用到一些通用的STL算法,如std::sort(排序),std::find(查找),std::for_each(对容器中每个元素执行操作)等。此外,容器还提供了很多成员函数来操作元素,如push_back,pop_back,insert,erase,begin,end等。

c++STL算法的理解与使用(sort, find, binary_search等)

C++的STL(Standard Template Library)提供了一系列算法,这些算法可以与STL容器配合使用,以执行各种常见的任务,如排序、查找和搜索。以下是对一些常见STL算法的理解与使用的简要说明:

  1. std::sort(排序)
    std::sort是一个通用排序算法,可以对任何提供随机访问迭代器的序列进行排序。
#include <algorithm>  
#include <vector>  
#include <iostream>  int main() {  std::vector<int> numbers = {4, 2, 5, 3, 1};  // 使用std::sort对vector进行排序  std::sort(numbers.begin(), numbers.end());  // 输出排序后的vector  for (const auto& num : numbers) {  std::cout << num << " ";  }  return 0;  
}
  1. std::find(查找)
    std::find用于在序列中查找特定元素。如果找到,则返回指向该元素的迭代器;否则,返回序列的尾迭代器。
#include <algorithm>  
#include <vector>  
#include <iostream>  int main() {  std::vector<int> numbers = {1, 2, 3, 4, 5};  int target = 3;  // 使用std::find查找target  auto it = std::find(numbers.begin(), numbers.end(), target);  if (it != numbers.end()) {  std::cout << "Found " << target << " at position: " << std::distance(numbers.begin(), it) << std::endl;  } else {  std::cout << target << " not found" << std::endl;  }  return 0;  
}
  1. std::binary_search(二分查找)
    std::binary_search用于在已排序的序列中执行二分查找。它要求序列必须是已排序的,否则结果将是未定义的。
#include <algorithm>  
#include <vector>  
#include <iostream>  int main() {  std::vector<int> numbers = {1, 2, 3, 4, 5};  int target = 3;  // 确保序列已排序  std::sort(numbers.begin(), numbers.end());  // 使用std::binary_search进行查找  bool found = std::binary_search(numbers.begin(), numbers.end(), target);  if (found) {  std::cout << target << " found in the sorted sequence" << std::endl;  } else {  std::cout << target << " not found" << std::endl;  }  return 0;  
}

使用注意事项:
std::sort默认使用<操作符来比较元素,但也可以传递自定义比较函数或lambda表达式。
std::find和std::binary_search返回的都是迭代器,需要与容器的开始迭代器比较来确定是否找到了目标元素。
std::binary_search要求序列必须是已排序的,否则会返回未定义的结果。
这些算法都提供了很大的灵活性,因为它们是模板化的,可以与任何类型的容器一起使用,只要这些容器提供适当的迭代器类型。此外,它们也可以很容易地与C++的lambda表达式结合使用,以提供自定义的比较逻辑。

相关文章:

c++STL容器的使用(vector, list, map, set等),c++STL算法的理解与使用(sort, find, binary_search等)

cSTL容器的使用&#xff08;vector, list, map, set等&#xff09; 在C的STL&#xff08;Standard Template Library&#xff09;中&#xff0c;容器是重要的一部分&#xff0c;它们提供了各种数据结构来存储和管理数据。以下是一些常见的STL容器及其使用方法的简要说明&#x…...

选择VR全景行业,需要了解哪些内容?

近年来&#xff0c;随着虚拟现实、增强现实等技术的持续发展&#xff0c;VR全景消费市场得以稳步扩张。其次&#xff0c;元宇宙行业的高速发展&#xff0c;也在进一步拉动VR全景技术的持续进步&#xff0c;带动VR产业的高质量发展。作为一种战略性的新兴产业&#xff0c;国家和…...

830. 单调栈

Problem: 830. 单调栈 文章目录 思路解题方法复杂度Code 思路 这是一个单调栈的问题。单调栈是一种特殊的栈结构&#xff0c;它的特点是栈中的元素保持单调性。在这个问题中&#xff0c;我们需要找到每个元素左边第一个比它小的元素&#xff0c;这就需要使用到单调递增栈。 我们…...

H5 个人引导页官网型源码

H5 个人引导页官网型源码 源码介绍&#xff1a;源码无后台、无数据库&#xff0c;H5自检测适应、无加密&#xff0c;直接修改可用。 源码含有多选项&#xff0c;多功能。可展示自己站点、团队站点。手机电脑双端。 下载地址&#xff1a; https://www.changyouzuhao.cn/1434.…...

【Linux】部署前后端分离项目---(Nginx自启,负载均衡)

目录 前言 一 Nginx&#xff08;自启动&#xff09; 2.1 Nginx的安装 2.2 设置自启动Nginx 二 Nginx负载均衡tomcat 2.1 准备两个tomcat 2.1.1 复制tomcat 2.1.2 修改server.xml文件 2.1.3 开放端口 2.2 Nginx配置 2.2.1 修改nginx.conf文件 2.2.2 重启Nginx服务 2…...

WPF Style样式设置

1.本window设置样式 <Window x:Class"WPF_Study.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressi…...

【STM32】软件SPI读写W25Q64芯片

目录 W25Q64模块 W25Q64芯片简介 硬件电路 W25Q64框图 Flash操作注意事项 状态寄存器 ​编辑 指令集 INSTRUCTIONS​编辑 ​编辑 SPI读写W25Q64代码 硬件接线图 MySPI.c MySPI.h W25Q64 W25Q64.c W25Q64.h W25Q64_Ins.h main.c 测试 SPI通信&#xff08;W25…...

普通中小学校管理信息系统V1.1

普通中小学校管理信息系统 Ordinary Primary and Secondary Schools Management Information System 普通中小学校管理信息系统 Ordinary Primary and Secondary Schools Management Information System...

中国水果采摘机器人行业市场研究及发展趋势分析报告

全版价格&#xff1a;壹捌零零 报告版本&#xff1a;下单后会更新至最新版本 交货时间&#xff1a;1-2天 第一章 2016-2026年中国水果采摘机器人行业总概 1.1 中国水果采摘机器人行业发展概述 机器人技术的发展是一个国家高科技水平和工业自动化程度的重要标志和体现。机器…...

Linux多进程与信号

在多进程的服务程序中&#xff0c;如果子进程收到退出信号&#xff0c;子进程自行退出。如果父进程收到退出信号&#xff0c;应该先向全部的子进程发送退出信号&#xff0c;然后自己再退出。 演示demo程序 #include <iostream> // 包含输入输出流库&#xff0c;用于输…...

Self-attention与Word2Vec

Self-attention&#xff08;自注意力&#xff09;和 Word2Vec 是两种不同的词嵌入技术&#xff0c;用于将单词映射到低维向量空间。它们之间的区别&#xff1a; Word2Vec&#xff1a; Word2Vec 是一种传统的词嵌入&#xff08;word embedding&#xff09;方法&#xff0c;旨在为…...

【Flutter/Android】运行到安卓手机上一直卡在 Running Gradle task ‘assembleDebug‘... 的终极解决办法

方法步骤简要 查看你的Flutter项目需要什么版本的 Gradle 插件&#xff1a; 下载这个插件&#xff1a; 方法一&#xff1a;浏览器输入&#xff1a;https://services.gradle.org/distributions/gradle-7.6.3-all.zip 方法二&#xff1a;去Gradle官网找对应的版本&#xff1a;h…...

医疗实施-客户需求分析

在我的日常系统实施过程中&#xff0c;总会遇到不同角色的客户提出不同类别的需求。有的需求&#xff0c;客户目的想提高操作便携&#xff0c;但会对系统稳定性存在风险&#xff0c;应该拒掉。有些需求紧急而且影响重大&#xff0c;应该紧急处理。有些需求可以做&#xff0c;但…...

调度服务看门狗配置

查看当前服务器相关的sqlserver服务 在任务栏右键&#xff0c;选择点击启动任务管理器 依次点击&#xff0c;打开服务 找到sqlserver 相关的服务&#xff0c; 确认这些服务是启动状态 将相关服务在看门狗中进行配置 选择调度服务&#xff0c;双击打开 根据上面找的服务进行勾…...

AI时代 编程高手的秘密武器:世界顶级大学推荐的计算机教材

文章目录 01 《深入理解计算机系统》02 《算法导论》03 《计算机程序的构造和解释》04 《数据库系统概念》05 《计算机组成与设计&#xff1a;硬件/软件接口》06 《离散数学及其应用》07 《组合数学》08《斯坦福算法博弈论二十讲》 清华、北大、MIT、CMU、斯坦福的学霸们在新学…...

【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…...

LeetCode 0235.二叉搜索树的最近公共祖先:用搜索树性质(不遍历全部节点)

【LetMeFly】235.二叉搜索树的最近公共祖先&#xff1a;用搜索树性质&#xff08;不遍历全部节点&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公…...

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…...

四川易点慧电子商务有限公司抖音小店:可靠之选,购物新体验

在当今这个网络购物日益盛行的时代&#xff0c;选择一家可靠的电商平台成为了消费者最为关心的问题之一。四川易点慧电子商务有限公司抖音小店作为新兴的电商力量&#xff0c;凭借其独特的魅力和优势&#xff0c;正逐渐成为众多消费者心中的可靠之选。 易点慧电子商务有限公司在…...

SpringBoot自带的tomcat的最大连接数和最大的并发数

先说结果&#xff1a;springboot自带的tomcat的最大并发数是200&#xff0c; 最大连接数是&#xff1a;max-connectionsaccept-count的值 再说一下和连接数相关的几个配置&#xff1a; 以下都是默认值&#xff1a; server.tomcat.threads.min-spare10 server.tomcat.threa…...

测试工程师的副业指南:利用专业技能实现月入过万

一、解锁测试工程师的副业潜力在软件行业高速发展的今天&#xff0c;测试工程师早已不再是仅仅围绕着“找bug”打转的角色。他们凭借着对软件质量把控的专业能力、对各类系统架构的深入理解以及严谨的逻辑思维&#xff0c;在副业领域拥有着得天独厚的优势。越来越多的测试工程师…...

智能语音转文字终极指南:如何用AsrTools轻松完成音频转字幕

智能语音转文字终极指南&#xff1a;如何用AsrTools轻松完成音频转字幕 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accu…...

非洲车商采购中国二手车的完整流程:从找车到提车七步走

操作目标&#xff1a;帮助非洲车商、进口商、批发商及其采购代理&#xff0c;系统性地完成中国二手车采购。适用对象&#xff1a;想了解采购中国二手车完整流程的海外B端买家。采购流程SOP第一步&#xff1a;找车源渠道说明适用场景广州出口基地南沙、番禺、白云实地考察线上平…...

从RRM到RIC:手把手拆解5G O-RAN智能控制器如何“接管”你的基站

从RRM到RIC&#xff1a;5G O-RAN智能控制器的技术演进与实战解析 在5G网络架构的演进浪潮中&#xff0c;O-RAN联盟提出的开放无线接入网理念正在重塑传统基站的控制方式。本文将带您深入探索无线资源管理&#xff08;RRM&#xff09;如何进化为近实时智能控制器&#xff08;Nea…...

ESP32-S3-DevKitC-1 v1.8开箱实测:从驱动安装到‘Hello World’串口打印全记录

ESP32-S3-DevKitC-1 v1.8实战指南&#xff1a;从开箱到首个串口通信项目 第一次拿到ESP32-S3-DevKitC-1开发板时&#xff0c;那种既兴奋又略带忐忑的心情记忆犹新。作为乐鑫科技推出的新一代Wi-Fi蓝牙双模开发板&#xff0c;ESP32-S3系列在性能和外设支持上都有显著提升&#x…...

如何用LDBlockShow高效绘制连锁不平衡热图:从入门到精通的完整指南

如何用LDBlockShow高效绘制连锁不平衡热图&#xff1a;从入门到精通的完整指南 【免费下载链接】LDBlockShow LDBlockShow: a fast and convenient tool for visualizing linkage disequilibrium and haplotype blocks based on VCF files 项目地址: https://gitcode.com/gh_…...

无人机+点云+Civil3D:无控制点场景下的高精度土方算量实战

1. 无人机航测在复杂地形土方算量中的优势 石头山这类复杂地形一直是工程测绘的难点。传统全站仪测量需要测绘人员翻山越岭布设控制点&#xff0c;不仅效率低下&#xff0c;还存在安全隐患。而无人机航测就像给工程装上了"天眼"&#xff0c;特别适合解决这类难题。 去…...

热成像与计算机视觉融合:打造免提可穿戴交互新范式

1. 项目概述&#xff1a;从一次“意外”到可穿戴交互新范式 在实验室里摆弄新到的热成像相机&#xff0c;这原本只是一个打发时间的“快乐意外”。我的咖啡杯、显示器&#xff0c;甚至是我自己的脸&#xff0c;在热成像镜头下都呈现出有趣的温度图案。但真正让我停下手中咖啡的…...

为AI编码助手打造专业技能库:DSkills项目实战指南

1. 项目概述&#xff1a;为AI编码助手打造的专业技能库如果你和我一样&#xff0c;日常重度依赖Claude Code、Codex或者Gemini CLI这类AI编码助手来提升开发效率&#xff0c;那你肯定遇到过这样的场景&#xff1a;想让AI帮你搜索最新的技术文档&#xff0c;它却只能给出过时的信…...

Loop:基于Swift开发的macOS窗口管理框架解决方案

Loop&#xff1a;基于Swift开发的macOS窗口管理框架解决方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 在macOS桌面环境中&#xff0c;多窗口管理一直是效率工作流的关键瓶颈。传统的手动拖拽操作…...