令人头秃的bug总是源于基础不牢------你知道vector.size()是unsigned int吗

C++基础语法全解析:从内存模型到项目实战的硬核入门指南 在编程语言中,语法是构建程序的基石,它定义了代码的结构、逻辑和与计算机交互的规则。理解语法背后的原理,如内存模型、控制流和函数机制,是掌握一门语言的关键。这些基础概念直接决定了代码的性能、安全性和可维护性,具有极高的技术价值。无论是开发高性能系统、嵌入式设备还是游戏引擎,扎实的语法基础都是不可或缺的。本文聚焦于C++这门核心系统编程语言,深入剖析其基础语法体系。我们将从变量与数据类型背后的内存模型切入,探讨指针与引用这一C++的灵魂特性,并解析函数、控制流等核心要素。通过融入**列表初始化**避免窄化转换、 阅读详情

还是上次写的《四数之和》那题:Sort函数居然能改变元素值?记一次有趣的bug——四数之和

唉···dfs一直超时没过的去。于是我做了点剪枝优化后,卷土重来:

class Solution {
public:

    vector<vector<int>>res;
    vector<int> temp;
    int sum;

    void dfs(vector<int> nums, int sub)
    {
        if (temp.size() == 4)
        {
            if (sum == 0)
            {
                res.push_back(temp);
            }
            return;
        }
        if (sub >= nums.size())
        {
            return;
        }
if((4-temp.size())*nums[sub]>-sum)
{
    return;
}
        temp.push_back(nums[sub]);
        sum += nums[sub];
        dfs(nums, sub + 1);
        sum -= nums[sub];
        temp.pop_back();

        int next = sub+1;
        while (next<nums.size()&&nums[next] == nums[sub]) { next++; }
        dfs(nums, next);
    }
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
            sort(nums.begin(),nums.end());
            sum = -target;
            dfs(nums,0);
            return res;
    }
};

然鹅,每次运行 都只输出:

 于是我反反复复对代码的逻辑进行复查,翘了三节课就在这儿找bug,结果找死了也找不到。

 于是我掏出我的visual studio2019企业版。。。对每一次递归的值进行追踪。

 发现

 

if((4-temp.size())*nums[sub]>-sum)
{
    return;
}

每一次这个if的条件都成立。

此刻我:??????????

进行了一番试验后,我感到我的脸上发出了啪啪啪的响声。。。。。。

原来————

temp.size()的数据类型是unsigned int ,当它与负数相乘时,就会出现奇怪的结果——一个巨大的整数。于是每次if的条件基本上都成立。

所以只要改成这样即可:

if((4-(int)temp.size())*nums[sub]>-sum)
{
    return;
}

 

这鸽了半个月的题目终于可以用回溯算法切掉了!(开心) 

开nmmmmmm心

 

 

C++入门指南:从Hello World到编译原理与面向对象编程 编程语言的核心在于将人类可读的代码转化为机器可执行的指令,这一过程依赖于编译器的预处理、编译、汇编和链接四个关键阶段。理解编译原理不仅能帮助开发者排查“未定义引用”等常见错误,更是掌握程序运行机制的基础。在C++中,面向对象编程通过封装、继承和多态三大特性,实现了代码的模块化和复用,提升了软件工程的可维护性和扩展性。本文以经典的“Hello, World!”程序为切入点,深入解析了C++的编译流程、内存管理机制以及面向对象的核心概念,并结合实际开发中常见的指针使用、标准库容器(如vector)和调试技巧,为 阅读详情

相关推荐

PRIDE数据库20年:2025更新

PRoteomics IDEntifications (PRIDE)数据库(https://www.ebi.ac.uk/pride/)是全球领先的基于质谱(MS)的蛋白质组学数据存储库,也是ProteomeXchange联盟的创始成员之一。本文总结了过去3年中PRIDE资源及相关工具的发展情况。提交到PRIDE存档的数据集数量平均每月达到约534个。主要得益于基础设施的持续改进,如用于超大数据集的新文件传输协议(Globus)、新的数据重新提交流程以及自动数据集验证过程。

多组・学・多组学 2062

vector::size() 类型是无符号类型,通常是unsigned , 混用int和unsigned可能带来大问题,尤其是size()为0时

vector::size_type类型是无符号类型,通常是unsigned , 大于 0的整数  unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明...

wukai0909的博客 2283

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1016

vector容器

在标准容器中,只有vector和string提供了所有这些函数。 (1)size()可以获得容器中有多少元素,但不能获得容器为它容纳的元素分配的内存大小。 (2)capacity()可以获得容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可以容纳多少元素,而不是还可以容纳多少元素。如果想知道一个vector或string中有多少没有被占用的内存,则必须从capacity()中减...

coffee0218的博客 194

手把手教你用树莓派蓝牙抓取小米温湿度计2代数据,接入HomeAssistant(附密钥获取避坑指南)

本文详细介绍了如何通过树莓派蓝牙抓取小米温湿度计2代数据并接入HomeAssistant的完整流程。重点解析了获取32位加密密钥的三种方法,包括使用Telink Flasher工具、米家APP抓包和开源工具ATC_MiThermometer,并提供了HomeAssistant集成配置和常见问题排查指南,帮助用户实现稳定可靠的温湿度监测。

一名菜鸟攻城师 779

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

vector的size函数,返回的是unsigned,而不是int,因此w.size() - 1可能会出问题

其中,有时候w的长度为0时,lson = 1, 按理说应该执行。的语句块,但在实际运行中,并没有进入。w.size() 返回的是。就可以正常表示-1等数字。

诗子黎的博客 506

手把手教你学基带SOC芯片(4.2)--基带soc芯片的存储器设计

基带 SoC 中的存储器设计需要综合考虑功耗、成本和性能等因素。SRAM 适合高速缓存,DRAM 适合主内存,Flash 存储器适合非易失性存储。通过优化存储单元设计、阵列布局和外围电路,可以提高存储器的性能和效率。

MHD0815的博客 350

c++ vector的size()返回值是unsigned int

今天刷题是遇到的问题,代码语句是这个样子: while(i<nums.size()-2) 因为nums.size()返回的的是一个无符号整型变量,如果返回值为0的话,减去1就会变成一个很大的正数。 具体有多大呢?我在LeetCode的编译环境下面测试了一下 vector<int> s; cout<<s.size()-1; 得到的结果:184467440737095...

十早韦的博客 1912

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

摘要:按列表名单将路径a下的文件夹批量剪切到路径b。

qq_31762031的博客 1218

制作你自己的yolov5数据集并进行训练

项目地址:make-your-yolov5_dataset 一、数据集标注软件 labelImg labelMe 精灵标注助手 更多的标注工具你可以去看:深度学习图像标注工具汇总 、 十个最常用深度学习图像/视频数据标注工具 、 百度一下 在这里我选择使用labelImg 二、数据集标注 下载labelImg 解压,直接打开labelimg.exe labelImg标注数据 标注完成后即可获得VOC格式(生成.xml文件)的数据 目录结构: dataset │ ├─Annotations .

年少的勇气已经用完,剩下的就是三思而后行 1万+

【C++】两个例子解决 unsigned int 与 int 运算问题

unsigned:定义无符号类型,本身是unsigned int 的缩写。对于64位系统,取值范围为 0 ~ (2^32-1)。需要注意: 定义unsigned变量时需要保证为正数。 unsigned int 变量和int 变量在一起运算或比较时,会将int型转换为unsigned int型(算术运算的隐式转换)。 超过unsigned范围时,会从范围的另一端取值(补码)。 由于上面三个特性的存在,衍生出很多问题: 1、unsigned int型和int 型比较大小,int -6会被转为 unsig

RiceVan的博客 5930

[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster原理详解

Web渗透技术的核心是发现Web漏洞,发现漏洞有手工和软件自动化扫描两种方式。对于用户验证漏洞、用户凭证管理问题、SQL注入等常见Web漏洞,都可以通过Web扫描器进行扫描。各个扫描器的功能和结果都不同,常见的包括HScan、HScan、X-Sccan、Acunetix Web Vulnerability Scanner、Jsky、Router Scan扫描工具等。本文主要讲解三个常见的Web漏洞扫描工具,分别是NMapp、ThreatScan和DirBuster。希望这篇基础性文章对你有所帮助.

杨秀璋的专栏 1万+

C++模板编程:从泛型基础到实战应用全解析

泛型编程是C++中实现代码复用和类型抽象的核心范式,其核心思想是通过参数化类型来编写与具体数据类型无关的通用算法和数据结构。模板作为泛型编程的实现机制,允许开发者在编译期根据具体类型生成特化代码,从而提升代码的复用性和性能。在工程实践中,模板技术广泛应用于标准模板库(STL)的容器(如vector、map)和算法(如sort、find)实现,有效解决了代码重复和维护难题。通过函数模板和类模板,开发者可以构建灵活的数据处理组件,而模板特化、可变参数模板等进阶特性则支持更复杂的编译期逻辑定制。本文深入探讨了模板

weixin_34391445的博客 424

WINCC7.3破解文件

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++模板编程:从泛型基础到现代概念与工程实践

泛型编程是C++实现代码复用和类型安全的核心范式,其核心原理是通过参数化类型,在编译时生成针对具体类型的代码,从而避免重复逻辑。这一技术显著提升了代码的抽象能力和性能,是实现标准库容器和算法的基石。在工程实践中,模板技术广泛应用于构建通用数据结构、实现编译期计算以及设计领域特定库。本文聚焦C++模板,深入探讨函数模板与类模板的基础语法,解析模板特化、SFINAE等进阶机制,并引入C++20概念等现代特性,旨在帮助开发者掌握编写高复用、高性能代码的关键技能,有效应对实际项目中的抽象需求。

weixin_30684743的博客 411

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++入门指南:从环境搭建到核心语法与面向对象编程

在计算机编程领域,编译型语言因其执行效率高、对硬件控制力强而成为系统级开发和高性能应用的首选。C++作为一门支持面向过程、面向对象和泛型编程的静态类型编译语言,其核心原理在于通过编译器将高级代码翻译为机器码,在提供类、模板等高级抽象的同时,不丧失对内存和硬件的直接控制能力。这种设计赋予了C++极高的运行效率和技术价值,使其广泛应用于操作系统、游戏引擎、高频交易系统等对性能有极致要求的场景。理解C++的**指针与引用**机制是掌握其内存管理的关键,而**面向对象编程**思想则能有效组织复杂代码结构。本文将从环

weixin_30603633的博客 453

pscad IEEE标准系统搭建说明

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

C++中std::min与std::max的深度解析:从基础使用到高级技巧

在C++编程中,比较操作是基础且频繁使用的功能,其核心原理依赖于运算符重载和模板元编程。通过自定义比较器,开发者可以灵活定义对象的排序规则,这体现了C++泛型编程的强大技术价值。在实际工程实践中,正确处理类型安全、避免宏定义冲突以及管理对象生命周期,是确保代码健壮性的关键。这些概念广泛应用于算法实现、数据分析和性能优化等场景。本文将聚焦于std::min和std::max函数,详细探讨其标准用法、自定义比较规则以及与Windows头文件的兼容性问题,帮助读者从“会用”进阶到“用好”。

weixin_33831673的博客 304

C++语法核心精讲:从基础到现代特性,构建高性能编程思维

编程语言的核心在于其语法体系,它定义了如何组织代码、管理数据和控制程序流程。C++作为一门静态强类型语言,其语法设计在提供底层硬件控制能力的同时,也支持高级抽象和泛型编程。理解类型系统、内存模型和对象生命周期是掌握C++的关键,这直接关系到代码的安全性、性能和可维护性。现代C++通过智能指针、移动语义和RAII等机制,极大地简化了资源管理,减少了内存泄漏和野指针等常见问题。在软件开发中,无论是高性能计算、游戏引擎还是嵌入式系统,扎实的C++语法基础都能帮助开发者编写出高效、可靠的代码。本文聚焦于C++的核心

weixin_33704591的博客 359

C++模板编程:从泛型基础到SFINAE与Concepts实战

泛型编程是现代编程语言中实现代码复用的核心技术,它通过参数化类型来编写与具体数据类型无关的通用算法和数据结构。其核心原理是在编译期通过模板实例化生成针对特定类型的特化代码,实现静态多态性,从而在保证类型安全的同时消除运行时抽象开销。这一技术为构建高性能、可复用的软件组件提供了基础,广泛应用于标准库容器、算法以及各类通用框架的开发中。C++模板作为泛型编程的典型实现,通过两阶段编译机制支持函数模板、类模板以及模板元编程等高级特性。在实际工程中,开发者常会遇到代码膨胀、分离编译等挑战,而SFINAE技巧和C++

weixin_34302561的博客 365

C++ 11 [ 列表初始化 ]

自定义类也可以定义接受。

Small_entreprene的博客 1431

C++模板编程:从泛型基础到STL核心原理与实战应用

泛型编程是一种编程范式,其核心思想是将算法与数据类型解耦,通过编写与类型无关的通用代码来提高软件的可复用性和可维护性。其原理在于编译器在编译期根据具体类型自动生成特化代码,实现了类型安全与零运行时开销的平衡。这一技术的核心价值在于极大提升了代码的抽象能力和复用性,是构建大型、高效软件系统的基础。在C++中,泛型编程主要通过模板技术实现,其典型应用场景包括标准模板库(STL)中的容器(如vector、map)和算法(如sort、find)。模板通过函数模板和类模板,分别实现了通用算法和通用数据结构的构建。本文

weixin_34080571的博客 454

C++模板与泛型编程:从STL容器到现代概念的核心机制解析

泛型编程是一种编写与数据类型无关的通用代码的编程范式,其核心思想是通过抽象算法和数据结构,使其能够适用于多种类型。在C++中,这一范式主要通过模板机制实现,编译器在编译时根据具体类型实例化生成特化代码,从而实现类型安全的高效复用。这种技术价值在于极大提升了代码的复用性和抽象层次,避免了针对不同数据类型重复编写相似代码的冗余。其典型应用场景包括构建通用容器(如STL中的vector、map)和算法库,以及实现编译期计算等元编程任务。本文聚焦于C++模板的核心机制,深入解析函数模板与类模板的语法、实例化过程以及

weixin_30642869的博客 373

C++编程入门:从程序骨架到面向对象的核心概念解析

编程语言的核心在于理解其基础架构与数据流动机制。C++作为一门静态类型语言,其程序执行始于预处理器处理头文件,经由编译器翻译和链接器整合,最终从main函数入口运行。这种编译型语言的设计原理确保了执行效率与硬件控制能力,在系统软件、游戏引擎和高性能计算等领域具有不可替代的技术价值。理解变量与数据类型是管理内存中“容器”与“货物”的基础,而运算符与流程控制则让数据得以运算和决策。进一步地,通过函数实现模块化封装,并运用指针与引用直接操作内存地址,是掌握C++底层能力的关键。面向对象编程通过类与对象实现封装、继

weixin_34186128的博客 406

C++模板编程:从函数模板到类模板的泛型编程实战指南

泛型编程是一种编程范式,旨在编写与数据类型无关的通用代码,其核心原理是通过参数化类型实现算法和数据结构的抽象。在C++中,这一技术主要通过模板实现,编译器在编译时根据具体类型生成特化代码,从而在保证类型安全的同时提升代码复用性和运行效率。模板的技术价值在于消除代码冗余,支持编译期多态和计算,广泛应用于标准库容器(如vector、map)、算法(如sort、find)以及智能指针等基础组件开发。本文以函数模板和类模板为核心,通过max函数、FixedArray、SimpleUniquePtr等实例,深入解析模

weixin_34331102的博客 413

C++模板编程:从函数模板到类模板的泛型实践指南

泛型编程是C++实现代码复用的核心技术,其核心思想是编写与数据类型无关的通用算法和数据结构。通过编译时多态机制,模板允许开发者定义函数和类的蓝图,编译器根据具体类型生成特化代码,从而实现类型安全的代码复用。这一技术为STL标准模板库提供了基础支撑,使得vector、list等容器和sort等算法能够高效处理任意类型。在工程实践中,函数模板解决了算法通用性问题,类模板实现了数据结构的泛化,而模板特化则用于处理特殊类型的优化。掌握模板技术不仅能提升代码复用率,更是理解现代C++库设计和实现高性能泛型系统的关键,

weixin_34293911的博客 439

C++模板编程:从泛型算法到智能指针的实战指南

泛型编程是C++中实现代码复用的核心技术,它允许开发者编写与具体数据类型无关的通用算法和数据结构。其核心原理是通过模板在编译时生成针对特定类型的代码,从而提升代码的抽象能力和可维护性。这一技术为构建高效、灵活的基础库提供了可能,广泛应用于排序算法、容器实现和资源管理等场景。例如,通过函数模板可以轻松实现通用的冒泡排序算法,支持自定义比较逻辑;而类模板则能用于构建类型安全的栈、动态数组等数据结构。结合RAII(资源获取即初始化)原则,模板还能实现类似智能指针的资源管理类,确保内存安全。本文以C++函数模板和类

weixin_30437847的博客 412
上一篇: sort函数居然能改变元素值?记一次有趣的Bug——四数之和
下一篇: 探究“补阶乘大法的本质“——糖水不等式
咖啡咖_CoffCa
博客等级 码龄6年 116粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡咖_CoffCa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值