写了个测试vector,map存取的小程序

C++ unordered_map底层原理、性能优化与避坑指南 哈希表是计算机科学中实现高效键值查找的核心数据结构,其核心原理是通过哈希函数将键映射到固定大小的数组索引,从而实现平均O(1)的查找、插入和删除操作。在C++标准库中,std::unordered_map正是基于哈希表实现的关联容器,它通过链地址法处理哈希冲突,并内置了动态扩容机制。理解其底层实现对于编写高性能、健壮的代码至关重要,这涉及到哈希函数的设计、负载因子的调控以及迭代器失效规则等关键技术细节。在实际工程中,unordered_map被广泛应用于缓存系统、词频统计、数据库索引和快速查找等场景。本文聚 阅读详情

#include <vector>
#include <map>
#include <iostream>
using namespace std;

class object{
public:
    object():id(objectsum++),name("object"){ cout << "create " << name << "[" << id << "]" << endl;}
    ~object(){cout << "delete  " << name << "[" << id << "]" << endl;}
    object(const object& o){id = o.id;name = "object_copy"; cout << "make a copy  of " << o.name << "[" << o.id << "]" << endl;}
    static int objectsum;
    int id;
    string name;
};

int object::objectsum = 0;

int main(){
    /*test1
    vector<object> v;
    v.push_back(object());
    //v.clear();
    //cout << "~~~~~~~~~~~~"<< endl;
    v.push_back(object());
    v.push_back(object());
    cout << "capacity->" <<  v.capacity() << endl;
    */

   //test1通过传值方式插入元素到vector,结果产生不必要的临时对象,而且在vector本身容量不够时,又扩大容器,把旧容器所有元素转移到新的容器中,又产生了大量的临时对象的拷贝。如果容器内元素为对象时,需要调用对象构造函数,拷贝构造函数,析构函数。所以应该在里面存放对象指针。不应该存放对象。除非存放的是普通类型。避免不必要的函数调用开销。

    /*test2
    vector<object*> v;
    v.push_back(new object); 
    v.push_back(new object);
    vector<object*>::iterator i;
    i = v.begin();
    while(i!=v.end()){
    delete *i;
        i++;
    }
    v.clear();
    */
    //test2 vector存放指针类型时候,如果调用clear,不会释放指针所指向的对象空间。只会释放存放指针的那点点空间。需要手工释放指针,然后再释放调用clear,在QT中,QVector只存放指针。所以可以设置是否删除QVector时一并释放指针所指向的空间。在标准库STL中,因为vector还能存放对象。所以可能作不到这点吧?
  
    /*test3
    vector<object>* v = new vector<object>;
    v->push_back(object());
    delete v;
    return 0;
    */
   //test3  如果vector存放的是值,不是指针的话,再被删除的同时吧所有对象也都删除了。

    map<int,object*>* m = new map<int,object*>;
    m->insert(make_pair(0,new object()));
    m->insert(make_pair(0,new object()));
    m->clear();
    delete m;
   //map 被删除时,也不会自动清除指针所指向的对象的空间。
}
 

面试题:vector和map的区别,异同。空间分布,100万数据存哪个比较合适。 文章目录一、 迭代器区别二、vector三、Map、Set四、vector_map 为什么比map效率高五、如何选择六、容器选择原则七、效率对比 一、 迭代器区别 ①vector为顺序容器,erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器:可以这样使用: for( iter = c.begin(); iter != c.end(); ) iter = c.erase(iter); 阅读详情

相关推荐

虚拟机ubuntu22.04.3中安装vitis2024.1注意事项

虚拟机ubuntu安装vitis2024.1

qq_52033578的博客 2495

C++内存对齐与数据布局优化:量化交易中的纳秒级性能提升实战

内存对齐是计算机系统编程中的基础概念,它源于CPU访问内存的硬件特性。CPU以字(Word)为单位读取数据,对齐访问能确保单次总线操作完成数据加载,而未对齐访问则可能引发多次内存读取,造成性能损失。在结构体布局中,编译器会插入填充字节以满足成员的对齐要求,不当的成员顺序会导致内存浪费。其技术价值在于提升缓存利用率和访问局部性,减少缓存未命中(Cache Miss)和伪共享(False Sharing),这对计算密集型应用至关重要。应用场景广泛,尤其在金融量化交易、游戏引擎和高性能计算等领域,微小的延迟优化都

cneo2012的博客 584

警惕AI依赖:如何避免数字水蛭侵蚀你的认知能力

在人工智能技术日益普及的今天,人机协作已成为现代工作流的核心范式。其原理在于通过算法模型辅助人类完成信息处理、内容生成等任务,从而提升效率。然而,过度依赖AI可能导致认知卸载,引发思考能力退化等潜在风险。从技术价值看,AI的核心在于增强而非替代人类智能,关键在于建立健康的协作模式。在应用场景上,无论是编程开发、内容创作还是决策分析,用户都需警惕工具依赖对深度工作、创造性思维和决策责任的侵蚀。本文聚焦于识别AI依赖的早期信号,并提供构建分阶段使用流程、将AI作为质疑者等具体策略,旨在帮助读者守护核心认知能力,

weixin_30240349的博客 624

C++ vector和嵌套map用法

void FormatStr::DecodeStr(){ map&lt;string, string&gt; mapParse; map&lt;string, string&gt;::iterator iter; string rawStr{R"(?contentName={"abc":"def", "sa"}&amp;select={contentName, a, b...

qiumoyou的博客 3645

深入解析Unity3D中PostLateUpdate突然占用大量时间的原因

在Unity3D的生命周期中,是一个在LateUpdate之后被调用的方法。它通常用于处理一些需要在所有更新(包括物理更新和动画更新)之后进行的逻辑。由于它在游戏循环的后期阶段被调用,因此它通常用于处理与渲染直接相关的任务,如相机调整、UI更新等。突然占用大量时间的问题可能由多种原因引起,包括复杂的逻辑处理、频繁的资源加载、不恰当的渲染优化、插件或第三方库的副作用以及内存泄漏或垃圾回收等。为了解决这个问题,开发者需要仔细审查和优化中的代码,同时利用Unity提供的工具来监控和分析游戏性能。

Yori_22的博客 979

【PostgreSQL】PostgreSQL数据库函数比对模板(PG通用)

LOOKUP 函数从单行或单列区域 (区域:工作表上的两个或多个单元格。区域中的单元格可以相邻或不相邻。)或数组 (数组:用于建立可生成多个结果或可对在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。LOOKUP 函数具有两种语法形式:向量形式和数组形式。vlookup查找匹配值超过255个字符显示#Value的解决办法。如果值为错误值 #N/A,则返回 TRUE。

tttzzzqqq2018的博客 1493

C++ vector与map的混合运用

/ itMap->first 可以取B容器的Key。//创建容器B的迭代器。//通过A获取到容器B的指针。注意: 在一个A容器存另一个容器B的指针的时候。

m0_67403272的博客 3055

CloudCompare 二次开发(41)——点云重建三维凸包并计算体积

本文介绍了如何结合PCL与CloudCompare实现点云三维凸包的构建与可视化。通过代码集成,在CloudCompare界面添加功能按钮,实现点云数据转换、凸包构建、体积计算以及可视化显示。具体步骤包括:1) 在UI中添加功能按钮;2) 将点云数据转换为PCL格式;3) 使用PCL的ConvexHull算法构建三维凸包;4) 计算并显示凸包体积;5) 将结果以点云和网格形式可视化显示。最终实现了点云凸包的自动构建与体积计算功能,为点云处理提供了实用工具。

点云侠的博客 193

C++ vector和map的嵌套使用

在实习公司的项目里,需要保存每个用户及其所有的操作指令,我想到的是用multimap,或者是map和vector嵌套的数据结构来保存这些数据。一开始是想用multimap的,因为嵌套的给人感觉比较复杂,使用后发现multimap在遍历输出的时候,如果想以用户来划分有点麻烦了,除了操纵容器外还需要其他的方式来判断,遂敢用map和vector的嵌套结构,实际使用时发现容器嵌套使用也不是特别麻烦,当然mu

hv617959的博客 1万+

【花雕学编程】Arduino FOC 之AS5048A磁编码器模块

您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。在Arduino平台上实现FOC可以提供平滑的运行和高度的扭矩、速度和位置控制,它通过精确控制电机的电流和电压来实现高效率、高精度和低噪声的操作。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、高性能电机控制:FOC是一种高级的电机控制算法,可以精准控制PMSM(永磁同步电机)和BLDC(无刷直流)电机,实现平滑的转速和扭矩输出。

雕爷学编程 1496

金融数字化——详解2025年金融智能体深度应用报告【附全文阅读】

《2025年金融智能体深度应用报告》显示,金融智能体已实现80%部署率,推动行业效率提升30%-50%。报告指出智能体通过"感知-推理-规划-执行-进化"机制突破大模型局限,在风控、客服、投研等100+场景实现自动化。典型案例显示,工商银行信贷审批效率提升60%,蚂蚁数科智能客服解决80%问题。尽管面临系统协同、标准缺失等挑战,未来趋势将向多模态交互、自主进化和ESG投资等方向拓展。

cdfunlove的博客 203

测试vector,map存取的小程序

 #include #include #include using namespace std;class object{public:    object():id(objectsum++),name("object"){ cout     ~object(){cout     object(const object& o){id = o.id;name = "object_copy"; c

时间是用来流浪的,遗忘是用来生存的! 464

Android SystemUI——车载CarSystemUI加载(八)

车载 CarSystemUI 是指专门为汽车环境设计的用户界面和用户体验(UI/UX),它通常与 Android Automotive OS 或其他嵌入式操作系统一起工作,为驾驶者和乘客提供安全、直观且高效的交互方式。Android Automotive OS 是 Google 专门为汽车开发的操作系统版本,它基于 Android 平台,并针对车辆内部的使用进行了优化。

小旭的专栏 2172

STL容器 内存释放

在一个项目中,需要在服务端保存玩家的录像回放数据,采用vector/map容器暂存了下发的消息数据,等待游戏结束后就将其写入文件,然后用clear清除掉这块缓存。 游戏上线了之后,发现其占用的内存一直上升,搜寻日志后发现,每局结束后回放占用的空间并没有释放掉,随着房间一直保留。也就是假设一共1000个房间,每个房间都有玩家游戏过后,就会有一千份回放空间没释放。 瞬 · 间 · 爆 · 炸 普...

Vis_Stu的专栏 3292

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机科学核心学习路线:从编程基础四大件到C++与Linux系统实践

数据结构与算法是计算机科学的基石,它们定义了程序的组织方式和问题解决的效率。数据结构关注数据的存储与组织模型,如数组、链表、树、哈希表等,决定了数据操作的性能;算法则研究解决问题的步骤与策略,其核心是时间与空间复杂度分析。掌握这些基础原理,是进行高性能系统开发、优化软件效率的关键技术价值。在实际应用场景中,无论是构建复杂的后端服务、开发底层基础设施,还是进行人工智能算法优化,扎实的数据结构与算法功底都不可或缺。本文以C++和Linux环境为实践载体,深入探讨如何通过学习红黑树、动态规划等核心知识,以及理解缓

weixin_34357436的博客 347

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

工业自动化系统设计:流程优化与架构实践

在工业自动化领域,系统设计与流程优化是提升项目效率的关键技术。通过合理的流程颗粒度控制和异常处理机制,可以显著提升系统的吞吐量和可靠性。现代工业系统常采用数据流与控制流分离的设计模式,结合硬件冗余和软件分布式事务,确保系统在复杂环境下的稳定运行。典型应用场景如智能工厂质检系统和STM32环境监测系统,都体现了流程设计与系统架构协同优化带来的性能提升。文章通过智能电饭煲控制、TinyML跌倒检测等案例,展示了实时性保障和扩展性设计的具体实现方法,为工业自动化项目提供可复用的工程实践参考。

weixin_30847865的博客 312

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++新手避坑指南:从环境配置到指针实战的极简学习路径

编程语言学习往往从理解核心概念开始,C++作为一门贴近硬件的系统级语言,其核心在于对内存和计算资源的直接管理。理解变量、函数、控制流等基础语法是构建程序的基石,而掌握指针与引用的原理,则是深入C++内存模型、实现高效数据操作的关键技术。这些知识赋予了开发者精细控制程序行为的能力,对于构建高性能系统、游戏引擎、基础设施软件等场景具有不可替代的价值。本文聚焦于新手学习C++时最常遇到的【开发环境配置】难题和【指针与引用】理解鸿沟,提供一条去芜存菁的实战路径,帮助初学者快速建立正确认知,避开常见陷阱,为后续探索现

weixin_30279671的博客 437

C++实现《我的世界》核心架构:从区块管理到渲染优化实战

游戏引擎开发是计算机图形学与软件工程的重要交叉领域,其核心在于高效管理实时交互的虚拟世界。理解其底层原理,如数据导向设计、内存管理与多线程同步,对构建高性能应用至关重要。在实时渲染中,视锥体剔除、实例化渲染等优化技术能显著提升帧率,而区块化世界表示则是无限地形生成的通用解决方案。这些技术共同支撑了如《我的世界》等沙盒游戏的流畅体验。本文以C++实践为例,深入探讨区块管理、网格生成与异步加载等热词技术,展示如何从零构建一个可运行的游戏世界原型,为开发者提供一套完整的性能优化与工程实现路径。

weixin_34067102的博客 454

STM32 SRAM运行配置指南:Keil环境下程序加载与调试优化

在嵌入式系统开发中,程序通常存储在Flash中运行,但Flash的擦写寿命、访问速度及调试效率有时会成为瓶颈。SRAM(静态随机存取存储器)作为芯片内部的高速易失性存储器,具有零等待访问、无限次快速写入的特性,能够有效提升调试效率和实时性。其技术价值在于为时间敏感型算法、底层驱动调试及故障诊断提供了纯净的执行环境,避免了Flash预取和等待状态引入的时序干扰。通过理解链接脚本的加载视图与执行视图分离原理,并配置专用的SRAM下载算法,开发者可以将程序完全加载至SRAM中运行,实现快速迭代验证。本文以STM3

weixin_34161083的博客 402

ERNIE-Image-Turbo与OpenMementos:轻量级图像生成与结构化推理记忆的工程落地实践

扩散模型(Diffusion Model)作为当前主流图像生成技术,其核心挑战在于推理延迟高、显存占用大及长程指令跟随能力弱;而大模型推理中的‘上下文爆炸’问题,本质是思维链(Chain-of-Thought)缺乏可压缩、可索引的记忆机制。ERNIE-Image-Turbo通过Prompt Token Pruning(PTP)与Step-wise Guidance蒸馏,在保持DiT架构前提下实现8步高质量生成,显著降低FLOPs与显存峰值;OpenMementos则首次将推理轨迹建模为结构化快照,支持Mem

weixin_33798152的博客 1470

C++实现读取文本文件数据到vector中

如题,要将如下文本文件读进vector中: #include <iostream> using namespace std; #include <cmath> #include <vector> #include <fstream>//将文本文件中得数据读入vector中,并返回一个vector。 vector<int> *InputData_To_Vector() { vector<in

黄飞的博客专栏 2万+

C++中vector和map使用详解

标准库Vector类型 使用需要的头文件: #include Vector:Vector 是一个类模板。不是一种数据类型。 Vector是一种数据类型。 一、 定义和初始化 Vector v1; //默认构造函数v1为空 Vector v2(v1);//v2是v1的一个副本 Vector v3(n,i);//v3包含n个值为i的元素 Vector v4(n); //v4含有n

System Architect 2万+

C++中vector可以作为map的键值

因为项目中需要根据状态找到一个对应的结果,就采用了map的结构,但是状态本身较为复杂,存在一个vector中。上次使用map的经验是自定义类类型作为键值必须重载<操作符,因为map的快速查找是基于红黑树的构建,因而键值必须能相互之间比较。所以担心vector作为类类型的键值会引发一些错误,就写了一个例子测试。结果证明vector可以直接作为map的键值使用。#include<iostream> #i

DARKMOON的专栏 1万+

C++容器之vector&map应用——解析配置文件(一)

本篇主要介绍如何使用map和vector解析以逗号分隔的配置文件,属于map和vector的初级应用。

不经一翻彻骨寒,怎得梅花扑鼻香 1041
上一篇: 大端法,小端法,位域[1]
下一篇: sync不错
飞羽飞之猪
博客等级 码龄21年 127粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值