c++ vector的使用,sort,find,易错点

C++中在vector中查找元素及其位置 阅读详情
闲话:

c++容器,使用的最多的有vector,deque与map,各自有不同的特色。而vector也使用得最多,最方便,所有在这里写下vector最常用的sort,find函数以及一些易错点。

正文:

vector的优点:申请的空间都是连续的,而且不用自己new,delete分配释放空间,减少内存溢出的风险,访问速度快,可以直接下标访问(list就不可以),对sort函数很友好。
vector的缺点:不可以向头节点添加元素(不可以用作队列),申请空间不可以太大(记得有个函数capacity可以查看最大空间)。
sort排序:
eg1:运算符重载进行排序
这里使用到了运算符重载,bool operator <(node node1),含义是前一个node(定义的结构体)与后一个node1进行’<'运算是根据哪种规则进行排序(注意是判断真假,所以是bool型的),例子里的规则是比较前一个的序号与后一序号,序号小的排在前面。这里类似于离散数学中自己定义一个偏序关系。

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
struct node
{
    T data;
    int serialNum;
    bool operator <(node node1)
    {
        return serialNum<node1.serialNum ? 1:0;
    }
};
int main()
{
    vector<node<int> > a;
    node<int> temp;
    temp.data=1;temp.serialNum=4;
    a.push_back(temp);
    temp.data=3;temp.serialNum=9;
    a.push_back(temp);
    temp.data=6;temp.serialNum=1;
    a.push_back(temp);
    temp.data=9;temp.serialNum=10;
    a.push_back(temp);
    temp.data=1;temp.serialNum=2;
    a.push_back(temp);
    sort(a.begin(),a.end());
    vector<node<int> >::iterator iter;
    for(iter=a.begin();iter!=a.end();iter++)
        cout<<(*iter).serialNum<<" ";
}

eg2:自定义函数进行排序
与上面类似,只是可以多定义几种排序方式。

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
struct node
{
    T data;
    int serialNum;
};
bool up(node<int> a1,node<int> a2)
{
    return a1.serialNum<a2.serialNum ? 1:0;
}
int main()
{
    vector<node<int> > a;
    node<int> temp;
    temp.data=1;temp.serialNum=4;
    a.push_back(temp);
    temp.data=3;temp.serialNum=9;
    a.push_back(temp);
    temp.data=6;temp.serialNum=1;
    a.push_back(temp);
    temp.data=9;temp.serialNum=10;
    a.push_back(temp);
    temp.data=1;temp.serialNum=2;
    a.push_back(temp);
    sort(a.begin(),a.end(),up);
    vector<node<int> >::iterator iter;
    for(iter=a.begin();iter!=a.end();iter++)
        cout<<(*iter).serialNum<<" ";
}

eg3:find的使用:
这里也需要定义运算符“==”,当比较为int型时bool operator ==(int a),
当结构体之间比较时bool operator ==(node a),注意find返回的是指针,只可以由迭代器访问。

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
struct node
{
    T data;
    int serialNum;
    bool operator ==(int a)
    {
        return serialNum==a;
    }
};
int main()
{
    vector<node<int> > a;
    node<int> temp;
    temp.data=1;temp.serialNum=4;
    a.push_back(temp);
    temp.data=3;temp.serialNum=9;
    a.push_back(temp);
    temp.data=6;temp.serialNum=1;
    a.push_back(temp);
    temp.data=9;temp.serialNum=10;
    a.push_back(temp);
    temp.data=1;temp.serialNum=2;
    a.push_back(temp);
    vector<node<int> >::iterator iter = find(a.begin(), a.end(), 4);
    if (iter != a.end())
        cout<<(*iter).data<<endl;
    else
        cout<<"can not find"<<endl;
}

易错点与需要注意的地方:

  1. .end()返回的不是尾地址,.end()-1才是。
  2. vector中大部分操作都是迭代器执行的,不可以用下标执行,如erase,find,sort等
  3. vector后端插入删除效率很高,但中间插入删除效率低,因为要执行多次赋值移位
结束:

水平不高,有错误欢迎指出呀

C++ vector容器 find erase的使用:查找并删除指定元素 C++ vector 删除符合条件的元素 C++ vector中实际删除元素使用的是容器vector中std::vector::erase()方法。 C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换。 1.std::vector::erase() 函数原型: iterator erase (iterator position);//删除指定元素 it... 阅读详情

相关推荐

C++ vector动态数组容器:原理、使用与性能优化全解析

动态数组是编程中处理可变大小数据集合的基础数据结构,它解决了静态数组编译时固定大小的局限性。其核心原理是通过连续内存分配和动态扩容机制,在运行时根据需要自动调整存储空间,从而在内存效率和灵活性之间取得平衡。这一技术价值在于提供了接近原生数组的随机访问性能(O(1)时间复杂度),同时支持元素的动态增删,极大简化了内存管理。在工程实践中,动态数组广泛应用于需要高效遍历和随机访问的场景,如数据缓存、算法实现和游戏对象管理。C++标准库中的std::vector容器正是这一概念的典范实现,它通过封装底层内存管理,提

weixin_34054931的博客 487

Vector的sort的使用

从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法 sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级。本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1、sort入门: 使用sort需要包含algorithm头文件,完整代码如下

qq_37160943的博客 1万+

C++ vector容器深度解析:从原理到实战优化指南

在C++编程中,动态数组是管理可变大小数据集合的基础需求。其核心原理在于通过连续内存块存储元素,实现常数时间的随机访问,并利用动态扩容机制支持数据增长。这种设计在工程上平衡了访问效率与内存灵活性,是构建高性能应用的关键技术。vector作为C++标准模板库(STL)的动态数组实现,通过封装自动扩容、边界检查等机制,显著提升了开发安全性与效率。它在游戏开发、数据处理、算法实现等场景广泛应用,尤其擅长处理需要高频随机访问和顺序遍历的任务。理解其内部机制如容量增长策略和迭代器失效规则,能帮助开发者规避常见陷阱,并

weixin_30315435的博客 282

C++ find函数详解

C++find()函数

weixin_46585382的博客 8515

C++模板与STL核心解析:从泛型编程到容器算法实战

泛型编程是C++中实现代码复用的核心技术,它通过模板机制让算法和数据结构独立于具体类型。其核心原理是在编译时根据类型参数生成特化代码,从而实现类型安全且高效的通用组件。这一技术极大地提升了代码的复用性和可维护性,是现代C++库设计的基石。在工程实践中,标准模板库(STL)是泛型编程的典范,它提供了如vector、map等开箱即用的容器组件,以及sort、find等通用算法。这些组件通过迭代器抽象协同工作,广泛应用于需要高性能数据处理的场景,如游戏开发、高频交易系统和基础软件库。理解模板和STL的工作原理,能

weixin_34375251的博客 484

C++新手入门:从环境搭建到首日刷题实战全攻略

编程语言是开发者与计算机沟通的基石,其核心在于将逻辑思维转化为可执行的指令。C++作为一门高性能的编译型语言,其设计哲学强调对系统资源的精细控制与零成本抽象,这使得它在性能要求苛刻的领域,如游戏引擎、高频交易系统等,具有不可替代的技术价值。对于初学者而言,掌握C++不仅是学习一门语法,更是构建严谨计算思维和深入理解计算机底层原理的过程。在工程实践中,将理论知识转化为实战能力的关键路径是算法刷题,这能有效内化语法并熟悉数据结构。本文以C++新手视角,聚焦于开发环境搭建与首日刷题策略,通过剖析经典问题如“两数之

weixin_34221073的博客 389

vector底层实现

vector底层实现,多种多样的隐式类型转换转换,

li_peixiansang的博客 586

【C++中vector容器实现局部排序的方法】——详解vector容器的sort()函数局部排序实现方法

本文介绍了vector容器实现局部排序的方法。通过使用sort()函数的重载版本,我们可以方便地对指定范围内的元素进行排序。掌握这一方法,可以使我们更好地利用vector容器进行开发。

Book_Sea的博客 3127

放弃Java用C++刷PAT?过来人聊聊IDE选择、STL库和那些年踩过的“超时”坑

本文分享了从Java转向C++刷PAT考试的经验,重点探讨了C++在算法竞赛中的优势,包括执行效率、STL库的应用以及开发环境配置。通过实战案例和优化技巧,帮助考生避免常见的“超时”问题,提升刷题效率。

weixin_30292843的博客 344

从理论到实践:利用FilterSolutions高效设计7阶椭圆低通滤波器

本文详细介绍了如何利用FilterSolutions软件高效设计7阶椭圆低通滤波器。文章从理论入手,对比了巴特沃斯、切比雪夫等经典滤波器特性,阐述了在要求高衰减陡度(如62dB抑制)和严格通带波纹(0.2dB)时,椭圆滤波器是最优选择。通过分步实战教程,指导读者完成从软件参数设置、性能验证到实际电路布局与调试的全过程,助力射频与高速数字信号处理工程师将理论转化为可靠设计。

jupi8的博客 559

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

C++泛型编程与STL实战:从原理到性能优化的进阶指南

泛型编程是一种编写与数据类型无关的通用代码的编程范式,其核心原理是通过模板在编译期生成针对特定类型的代码,实现零开销抽象。这种技术价值在于极大提升了代码的复用性、安全性和运行效率,是构建高性能、可维护软件系统的基石。在实际应用场景中,C++标准模板库(STL)是泛型编程思想最成功的实践,它提供了容器、算法和迭代器等通用组件,广泛应用于系统开发、游戏引擎、高频交易等对性能有严苛要求的领域。本文聚焦于STL的核心组件,深入解析vector动态数组的内存管理机制和迭代器失效问题,同时探讨unordered_map

weixin_33861800的博客 409

STM32 Modbus-RTU从零到实战:手把手教你用HAL库实现工业通信(附完整代码)

本文详细介绍了如何使用STM32 HAL库从零开始实现Modbus-RTU从机通信。内容涵盖RS485硬件设计、CubeMX串口与定时器配置、基于空闲中断的高效数据接收、协议栈状态机设计、CRC16校验实现以及常用功能码处理。文章提供了完整的代码框架和调试方法,帮助开发者快速构建稳定的工业通信节点。

weixin_28278377的博客 188

C++ STL算法:从迭代器原理到实战优化,提升代码效率

在C++编程中,算法是处理数据的核心逻辑,而标准模板库(STL)提供了一套高效、泛型的算法工具集。其设计基于迭代器抽象,实现了算法与容器的解耦,使得同一套逻辑可应用于不同数据结构,显著提升了代码的复用性和性能。STL算法的技术价值在于其经过深度优化的实现,通常比手写版本更高效,并能通过Lambda表达式等现代C++特性灵活定制操作。在应用场景上,无论是数据查找、排序、变换还是数值计算,STL算法都能大幅简化开发。本文聚焦于STL算法的核心使用技巧,例如`std::sort`排序与`std::accumula

weixin_30325487的博客 422

AI落地困局与破局者FDE:从技术神话到价值实干的战略转型

AI落地困局与破局者FDE:从技术神话到价值实干的战略转型 当前AI企业级应用面临三大核心挑战:业务场景深度非标化、技术落地"最后一公里"困局、以及市场竞争焦点转向实用价值。前线部署工程师(FDE)作为破局关键,通过技术-业务-产品三维交汇的复合能力,将AI从实验室推向生产环境。FDE不仅是技术架构师,更是业务价值挖掘机和产品进化传感器,通过"碎石路-高速公路"双循环模式,将定制化需求沉淀为可复用的平台能力。这种模式颠覆了传统SaaS的销售逻辑,形成基于价值的J型增长

随笔记录-分享&记忆 3996

LVI-SAM适配KITTI数据集避坑指南:IMU频率与数据同步问题解析

本文深入解析了将LVI-SAM框架适配KITTI数据集时,在IMU频率与多传感器数据同步方面遇到的核心挑战与解决方案。针对KITTI数据集中sync与extract两种数据包的差异,文章提供了从数据选择、参数调优到时间戳诊断与修复的完整避坑指南,帮助开发者实现稳定高效的SLAM系统部署。

7z8x2c4v6b9的博客 247

C++动态数组深度解析:std::vector与手动内存管理对比

动态数组是编程中处理运行时数据集合的核心数据结构,它允许程序在运行时动态分配和调整内存大小,突破了静态数组编译时固定大小的限制。其原理是通过在堆内存上分配连续空间,并维护指向该空间的指针来实现灵活存储。这一技术价值在于极大地提升了程序的灵活性和资源利用率,是构建复杂应用(如游戏引擎、数据分析系统)的基础。在C++中,实现动态数组主要有两种路径:一是使用标准库提供的std::vector,它封装了内存管理细节,强调安全性与开发效率;二是直接使用new/delete或malloc/free进行底层手动内存管理,

405

AI应用架构师视角:AI技术引发的全球经济格局重构,你看懂了吗?

本文将从AI应用架构师的独特视角,拆解AI技术栈(算力/算法/数据)如何通过"架构渗透"重塑产业价值链,分析中美欧等主要经济体的AI战略差异如何改写全球分工格局,并为企业与个人提供一套可落地的"AI经济适应性框架"。当OpenAI的GPT-4在代码生成、多模态理解上展现出超越人类的能力,当英伟达的H100芯片成为全球科技巨头争抢的"数字石油",当中国的AI大模型在电商、金融等场景实现规模化落地——我们正站在一场由AI技术引发的全球经济重构的临界点上。AI重构全球经济格局的过程,既是挑战,更是机遇。

小白菜的博客 1258

C++经典教材习题精解:从语法基础到STL实战的深度解析

C++作为一门核心的系统编程语言,其学习过程离不开对基础语法、内存管理和面向对象编程等核心概念的深入理解。这些概念不仅是构建复杂软件系统的基石,也是应对技术面试(如常见的C++八股文和C++面试题)的关键。理解指针与动态内存管理的原理,能有效避免内存泄漏和段错误等常见问题;掌握面向对象设计中的继承与多态,则是实现可扩展、可维护代码的基础。在工程实践中,标准模板库(STL)提供了高效、可靠的容器与算法,能极大提升开发效率。本解析正是围绕这些核心知识点,针对经典教材中的典型习题,提供从题意剖析、思路设计到代码实

weixin_34242509的博客 336

【知识分享】高速印刷电路板(PCB)寄生参数计算指南

对于高速PCB设计而言,寄生参数一直是令人讨厌的问题,它们会悄悄潜入PCB并在电路中造成严重的破坏,具体来说,它们是渗透到高速电路中的隐藏杂散电容器和电感器,包括由封装引线和长走线形成的电感器、PCB焊盘对金属平面形成的电容器、走线之间形成的电容器等等。

一只豌豆象的博客 1780

105、LLC谐振变换器的LTspice仿真建模

文章摘要:本文分享了LLC谐振变换器在LTspice中的仿真建模经验。作者从实际调试中炸管的教训出发,指出数学计算无法捕捉瞬态问题,必须通过仿真验证。详细介绍了半桥LLC主电路搭建、理想元件选择、开环增益扫频、闭环控制实现等关键步骤,重点讲解了启动过程、ZVS验证和短路保护等高风险工况的仿真技巧。文章提供了实用参数设置建议和LTspice代码片段,强调先开环后闭环的调试顺序,并提醒仿真结果需保留20%设计裕量。最后总结了谐振电流波形观察、死区时间优化等经验性建议。

Jack010169的博客 227

C++ vector模拟实现:从内存管理到标准容器的完整解析

vector是C++标准模板库中最基础的动态数组容器,其核心在于连续内存布局、RAII资源管理与随机访问迭代器支持。理解其实现原理,需掌握allocator内存分配与对象构造分离机制、1.5倍扩容策略背后的摊还分析、移动语义与noexcept异常规范对性能的影响,以及强异常安全(strong exception guarantee)在resize和reserve中的保障逻辑。这些技术点直接关联内存泄漏排查、迭代器失效规避、自定义类型安全构造等高频工程问题,广泛应用于高性能服务开发、嵌入式容器定制及C++面试

weixin_33895516的博客 318

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++ Primer 第4版习题解答与源码:从基础到实战的完整学习指南

C++作为一门经典的编程语言,其核心在于对内存管理、面向对象和泛型编程的深刻理解。学习C++通常从掌握基础语法和标准库开始,通过系统练习来巩固概念、理解底层原理。习题解答不仅是验证答案的工具,更是理解题目设计意图、培养良好编程习惯的桥梁。对于《C++ Primer》这类经典教材,一份高质量的习题解答能显著提升学习效率,帮助开发者跨越从理论到实践的鸿沟。在实际应用中,通过对比分析、调试和代码重构,可以深入理解动态内存管理、类设计、STL容器等关键概念,最终将知识融会贯通,应用于文本处理、自定义数据结构等实际项

weixin_33858485的博客 461

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【一文读懂】《Effective STL》50条有效使用STL的经验

本文按 Scott Meyers《Effective STL》(2001)原书 8 章顺序,系统梳理全部 50 条条款,覆盖容器选型、vector/string、关联容器、迭代器、算法、函数子、STL 实战与其他议题。对初学者易混淆处配代码示例,并在关键处标注 C++11/20 的现代等价写法(如 unordered_map、std::erase_if、lambda 取代 bind1st)。

码工许师傅 366

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从C到C++:算法选手如何利用STL提升编码效率与性能

在算法竞赛和编程实践中,数据结构与算法是核心基础。理解底层原理后,如何高效实现成为关键。C语言虽提供精细控制,但缺乏现成工具,导致实现复杂数据结构时代码冗长、调试困难。C++的标准模板库(STL)通过泛型编程和预置容器,解决了这一痛点。STL中的vector、unordered_map等容器,以及sort、lower_bound等算法,封装了常见数据结构和操作,让开发者能专注于算法逻辑而非底层实现。这种设计显著提升了编码效率和代码可维护性,尤其在处理图算法、哈希表应用和优先队列等场景时优势明显。对于算法选手

weixin_34378767的博客 390

C++ STL容器与算法实战指南:从原理到性能优化

在C++编程中,数据结构和算法是构建高效软件的核心基础。STL(标准模板库)通过泛型编程范式,将容器、算法和迭代器解耦,实现了高度的代码复用性和可维护性。其设计原理基于模板元编程,通过迭代器作为通用接口,使得同一套算法能够应用于不同的数据结构。这种设计极大地提升了开发效率,并保证了类型安全。在工程实践中,理解不同容器的底层实现(如vector的连续内存与缓存友好性、map的红黑树有序存储、unordered_map的哈希表快速查找)至关重要,直接影响程序性能。例如,vector的扩容机制涉及内存重新分配和数

ithome 470
上一篇: ccf-csp201709-4通信网络,c++,80分
下一篇: 2019年末记
爱安敝之
博客等级 码龄8年 64粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值