STL序列式容器中删除元素的方法和陷阱三

超级超级细的CLIP官方模型解读及代码逐行讲解 本文详细解析了OpenAI开源的CLIP模型代码架构。文章首先介绍模型概念,包括训练时通过对称损失计算图像-文本相似度,预测时通过余弦相似度匹配最佳文本。随后重点解析各模块代码实现:LayerNorm改进、QuickGELU激活函数、Transformer编码器结构、ViT图像编码器的特征提取过程、文本编码器的掩码机制和特征投影。最后阐述CLIP整体架构如何整合视觉和文本编码器,并详细说明了特征归一化和相似度计算的关键实现。全文通过代码级解读帮助读者深入理解CLIP模型的实现细节。 阅读详情

3 . list 容器中删除元素的方法

对于 list 容器,由于 list 本身有 remove 和 remove_if 的成员函数,所以最好优先考虑 list 自己的算法,对于 remove 函数,比较简单,不再讨论,对于 remove_if 函数,本人发现在 vc6.0 中有重大问题。我试了多种函数对象,总是编译不过,通过查看源代码,才发现 VC6.0 中对 remove_if() 函数作了简化,只提供了一种比较函数,它只能删除不等于某值的元素, VC6.0 种 remove_if() 函数的源码如下:

typedef binder2nd<not_equal_to<_Ty> > _Pr1;

       void remove_if(_Pr1 _Pr)

              {iterator _L = end();

              for (iterator _F = begin(); _F != _L; )

                     if (_Pr(*_F))

                            erase(_F++);

                     else

                            ++_F; }

从源码中可以看出, remove_if 中 _Pr1 函数对象被固定为 binder2nd<not_equal_to<_Ty> > 一种格式。而在 VC7.0 中已经修改了这个 bug ,源码如下:

template<class _Pr1>

              void remove_if(_Pr1 _Pred)

              {     // erase each element satisfying _Pr1

              iterator _Last = end();

              for (iterator _First = begin(); _First != _Last; )

                     if (_Pred(*_First))

                            erase(_First++);

                     else

                            ++_First;

              }

在 VC7.0 中 remove_if()是成员模板函数,可以用任何判断条件的函数对象。

例如:

例 8:

#include <iostream>

#include <string>

#include <list>

#include <algorithm>

using namespace std;

class CTest{

public:

       CTest( int i ) : m_iPrice ( i ) {     }

       int operator == ( const CTest& right ) const{

              return ( m_iPrice == right.m_iPrice ) ? 1 : 0;

       }

       int operator != ( const CTest& right ) const{

              return ( m_iPrice != right.m_iPrice ) ? 1 : 0;

       }

       int operator < ( const CTest& right ) const {

              return ( m_iPrice < right.m_iPrice ) ? 1 : 0;

       }

private:

       int m_iPrice;

       friend class CTestFunc;

};

class CTestFunc {            //       函数对象

public:

       int m_value;

       CTestFunc( int i ) : m_value( i ) {}

       bool operator () ( const CTest& clFirst ) {

              return ( clFirst.m_iPrice == m_value ) ? true : false;     }

};

void main() {

       list< CTest > listTest;

       for ( int i = 0; i < 5; i++ ) {

              CTest clTest( i );

              listTest.push_back( clTest );

       }

       cout << "remove before : " << listTest.size() << endl;

//     删除所有为 2 的元素

       listTest.remove_if( CTestFunc( 2 )  ); //       这条语句在 vc6.0 中不能编译通过 ,VC7.0 中可以

       cout << "remove after : 2, size =   " << listTest.size() << endl;

 

       //     删除所以不等于 2 的元素, VC6.0 中只能以这种方式调用 remove_if() 函数

       listTest.remove_if(  bind2nd( not_equal_to<CTest>(), 2 )    );

       cout << "remove after not equal to 2, size =  " << listTest.size() << endl;

 

       //     因为 CTest 类提供了 == 、 < 成员函数,所以也可以用 remove 函数

       listTest.remove( 2 ); //       删除所有为 2 的元素

       cout << "remove after : 2, size =  " << listTest.size() << endl;

}

不知道在 VC6.0 中能否突破只能函数对象被固定为 binder2nd<not_equal_to<_Ty> > 一种格式的限制?欢迎诸位大虾不吝赐教。不过采用通用算法 remove_if 只是多了几次对象的赋值的负担,如果对象不是太大,用通用算法的性能也是可以接受的。

另外,这些天使用了 VC7.0 后,感觉非常棒,不仅几乎符合 Standard C++ 规范,错误提示也更清晰,而编译速度和编译后的文件大小大大减小,如我原来的一个大量使用了模板的程序,用 VC6.0 编译后 Release 版的可执行文件大小为 1.2M ,用 VC7.0 编译后只有 420K ,我想可能 VC7.0 在代码优化和模板代码的膨胀等方面有了极大的改善;在 STL 的实现上也有了极大的改进,把原来的一些效率不好的地方都改进了,处理策略基本与 SGI STL 一致。

4 . STL 容器中元素为指针情况下的删除方法

对于容器中的元素为指针的删除方法。如果容器中的元素为指针则不能用上面介绍的用通过算法或成员函数的方法删除元素,因为那样做会导致内存泄露,容器中的元素为指针指向的内存没有释放,在这种情况下有以下方法解决:

1.   尽可能不用指针作为容器的元素。

2.   如果是因为要减少对象拷贝和赋值方面的负担,而要在容器中存放指针的话,可以考虑用 boost 库中的智能指针 shared_ptr 包装指针,达到容器中引用的语意。

3.   如果你不希望因为使用 boost::shared_ptr 增加引用计数的负担,认为引入智能指针不好理解,那么你用指针作为容器的元素要千万小心,这时你要自己管理内存。

例如:    

例 9 :用 boost 库中的智能指针 shared_ptr 包装指针的例子:

#include <iostream>

#include <sstream>

#include <string>

#include <vector>

#include <algorithm>

#include <list>

#include <boost/smart_ptr.hpp> // 要包含 BOOST 类库中智能指针的头文件

using namespace std;

class CTest {

public:

       CTest( const string& str, int iPrice ) : m_strName( str ), m_iPrice( iPrice ) { }

      void vPrint() { cout << "name=" << m_strName << " price = " << m_iPrice << endl;

       }

private:

       string m_strName;

       int   m_iPrice;

       friend class CStrFunc;

       friend class CIntFunc;

};

//     函数对象,根据 string 比较

class CStrFunc {

       string m_str;

public:

       CStrFunc( const string& str ) : m_str( str ) {

       }

       //     此处要改为 boost::shared_ptr<CTest>& ,因为 vector 容器中的元素为

//       boost::shared_ptr<CTest>

       bool operator() ( const boost::shared_ptr<CTest>& left ) {

              return ( m_str == (*left).m_strName ) ? true : false;

       }

};

//     函数对象,根据 int 比较

class CIntFunc {

       int m_iPrice;

public:

       CIntFunc( int iPrice ) : m_iPrice( iPrice ) {

       }

//     此处要改为 boost::shared_ptr<CTest>& ,因为 vector 容器中的元素为

//       boost::shared_ptr<CTest>

       bool operator() ( const boost::shared_ptr<CTest>& left ) {

              return ( m_iPrice == (*left).m_iPrice ) ? true : false;

       }

};

void main( ) {

 

       vector< boost::shared_ptr<CTest>  > vectTest;

       int i;

       for (  i = 0; i < 5 ; i++ ) {

              stringstream stream;

              stream << i;

              string str = stream.str();

              boost::shared_ptr<CTest>  ptrShare( new CTest( str, i ) );

              vectTest.push_back( ptrShare );

       }

      for (  i = 0 ; i < vectTest.size(); i++ )  {

              ( *vectTest[ i ] ).vPrint();

       }

       //     删除所有 m_strName = "3" 的元素

       vectTest.erase( remove_if( vectTest.begin(), vectTest.end(), CStrFunc( "3" ) ),

              vectTest.end() );

       cout << "delete 3 after : " << endl;

      for (  i = 0 ; i < vectTest.size(); i++ )  {

              ( *vectTest[ i ] ).vPrint();

       }

       //     删除所有 m_iPrice = 2 的元素

       vectTest.erase( remove_if( vectTest.begin(), vectTest.end(), CIntFunc( 2 ) ),

              vectTest.end() );

       cout << "delete 2 after : " << endl;

      for (  i = 0 ; i < vectTest.size(); i++ )  {

              ( *vectTest[ i ] ).vPrint();

       }

}

以上代码不会导致内存泄露。

例 10 :自己编程删除容器中元素为指针的例子:

 

#include <iostream>

#include <sstream>

#include <string>

#include <vector>

#include <algorithm>

using namespace std;

class CTest {

public:

       CTest( const string& str, int iPrice ) : m_strName( str ), m_iPrice( iPrice ) { }

      void vPrint() { cout << "name=" << m_strName << " price = " << m_iPrice << endl;

       }

private:

       string m_strName;

       int   m_iPrice;

       //     声明友员函数,因为 vDeleteVector 函数要访问 CTest 的 private 成员变量

       friend void vDeleteVector( vector< CTest*  >& vectTest, const string& str );

       friend void vDeleteVector( vector< CTest*  >& vectTest, int iPrice );

      

 

};

//     根据 CTest 类中 m_strName 比较

void vDeleteVector( vector< CTest*  >& vectTest, const string& str ) {

       vector< CTest* >::iterator itVect = vectTest.begin();

       for ( ; itVect != vectTest.end();; ) {

              if ( (*itVect)->m_strName == str ) {

                     //       删除 vector 容器中指针元素指向的内容,防止内存泄露

                     delete *itVect;

                     itVect = vectTest.erase( itVect );

              }

              else {

                     ++itVect;

              }

       }

 

}

//     根据 CTest 类中 m_iPrice 比较

void vDeleteVector( vector< CTest*  >& vectTest, int iPrice ) {

       vector< CTest* >::iterator itVect = vectTest.begin();

       for ( ; itVect != vectTest.end(); ) {

              if ( (*itVect)->m_iPrice == iPrice ) {

                     //       删除 vector 容器中指针元素指向的内容,防止内存泄露

                     delete *itVect;

                     itVect = vectTest.erase( itVect );

              }

              else {

                     ++itVect;

              }

       }

 

}

 

void main( ) {

 

       vector< CTest*  > vectTest;

       int i;

       for (  i = 0; i < 5 ; i++ ) {

              stringstream stream;

              stream << i;

              string str = stream.str();

              CTest* pclTest =  new CTest( str, i ) ;

              vectTest.push_back( pclTest );

       }

      for (  i = 0 ; i < vectTest.size(); i++ )  {

              vectTest[ i ]->vPrint();

       }

       //     删除所有 m_strName = "5" 的元素

       vDeleteVector( vectTest, "3" );

       cout << "delete 3 after : " << endl;

      for (  i = 0 ; i < vectTest.size(); i++ )  {

              vectTest[ i ]->vPrint();

       }

       //     删除所有 m_iPrice = 2 的元素

       vDeleteVector( vectTest, 2 );

       cout << "delete 2 after : " << endl;

      for (  i = 0 ; i < vectTest.size(); i++ )  {

              vectTest[ i ]->vPrint();

       }

}

原则:

1.   尽可能用通用算法。相信 STL 的算法要比自己的实现高效、优雅、安全。

2.   优先用容器自身的成员函数。 见《 Effective STL 》中 Item 44: Prefer member functions to algorithms with the same names

3.   尽可能熟悉函数对象。

4.   多看 STL 的源码,了解其实作。

5.   不成熟的优化是一切恶果的根源。编写代码,安全第一。

综上,在 STL 中删除容器中部分元素时要特别小心,不过通过使用通用算法或容器本身的删除函数,能大大减小重复代码和程序出错的机会,能够使代码得到优化,生成高效的代码。

【工具使用】Keil常用的调试操作整理介绍 2、当选择了非0级优化时,调试可能会变得困难,具体表现在断点调试。该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的置。:如果是在C语言窗口中,则是按单条语句执行,与单步调试不同的是,遇到函数不会进入函数内部,而是直接全速运行函数,并跳到下一条语句。但我的Keil软件中无法显示这个视图,并且通过修改系统试图,调试时,点击打开系统视图发生了闪退的现象,目前能想到的原因是:重新安装Keil,安装最新版本。 阅读详情

相关推荐

一文读懂:CAN总线Bus-Off的触发条件与自动恢复机制

本文详细解析CAN总线Bus-Off状态的触发条件与自动恢复机制。根据ISO 11898-1标准,当发送错误计数器(TEC)超过255时节点进入Bus-Off状态,并通过检测128次总线空闲条件实现自动恢复。文章结合实战案例,探讨硬件故障、软件配置及电磁干扰等常见触发场景,并提供快慢恢复策略与调试方法,帮助工程师快速定位并解决CAN网络故障。

rgv234567的博客 360

STL序列式容器中删除元素的方法和陷阱 三

3.list容器中删除元素的方法&lt;o:p&gt;&lt;/o:p&gt;对于list容器,由于list本身有remove和remove_if的成员函数,所以最好优先考虑list自己的算法,对于remove函数,比较简单,不再讨论,对于remove_if函数,本人发现在vc6.0中有重大问题。我试了多种函数对象,总是编译不过,通过查看源代码,才发现VC6.0中对remove_if()函数作了简...

手机即信息 162

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 243

转载: STL序列式容器中删除元素的方法和陷阱三

3.list容器中删除元素的方法 对于list容器,由于list本身有remove和remove_if的成员函数,所以最好优先考虑list自己的算法,对于remove函数,比较简单,不再讨论,对于remove_if函数,本人发现在vc6.0中有重大问题。我试了多种函数对象,总是编译不过,通过查看源代码,才发现VC6.0中对remove_if()函数作了简化,只提供了一种比较函数,它只能删除不等于某...

weixin_34292924的博客 102

蛋白质组学实战指南 | (八)从数据到洞见:差异蛋白筛选与功能解析全流程

本文系统阐述了蛋白质组学数据分析中,从原始数据质控到差异蛋白筛选与功能解析的全流程。重点介绍了数据质量评估、差异蛋白筛选的统计方法(包括多重检验校正)、功能注释与富集分析,以及蛋白互作网络构建与关键节点识别。最后,为如何将生物信息学洞见转化为实验验证提供了清晰的规划思路,助力研究者完成从数据到生物学知识的闭环。

weixin_29250573的博客 371

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3333

转载: STL序列式容器中删除元素的方法和陷阱一 .

  在 STL (标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在 STL 中删除容器有很多陷阱,网上也有不少网友提到如何在 STL 中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器 vector 、 list 中安全删除元素的方法和应该注意的问题,        其它如 queue 、 stack 等配接器...

weixin_34184158的博客 83

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1650

STL容器的删除元素问题

STL的容器分为两类,一类是序列式容器,即数据顺序连续存储,如:vector、deque;另一类是关联式容器,即数据不连续存储,如:map、list、set。对于STL容器的数据删除操作,有一些需要注意的地方。 1、序列式容器的数据删除        下面例子以容器list为例: [cpp] view plain copy for (list

weixin_36145588的博客 325

什么是垂直同步?电脑快速消除屏幕撕裂与提升游戏性能的方法 垂直同步、游戏画面撕裂、游戏优化、VSync、FPS、FreeSync、G-Sync、显卡驱动更新、游戏画质、输入延迟

看这张动图,左边的画面出现了明显“切开”的断层现象,而右边画面非常流畅,没有撕裂。这正是「垂直同步」开关的区别。:每秒生成多少帧图像。比如 60FPS 表示一秒钟显示 60 张图片。刷新率(Refresh Rate):显示器每秒刷新几次画面,单位是赫兹(Hz)。60Hz 表示每秒刷新 60 次。参数说明FPS显卡渲染速度(逻辑帧率)刷新率显示器的显示频率(物理限制)当 FPS 高于刷新率时,显卡渲染的画面来不及被显示器显示,导致撕裂。屏幕撕裂(Screen Tearing)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1346

跨平台商品模型大解析:亚马逊 vs 阿里 vs 拼多多

本文深入探讨了亚马逊、阿里巴巴和拼多多三大电商平台的商品模型设计,分析了它们在变体关系、商品抽象层级和SKU定义等方面的异同。亚马逊模型以物流和变体为中心,强调全球仓配体系下的标准化管理;阿里模型采用多视角的弹性结构,适用于多类目、多品牌、多卖家环境;拼多多模型则结合平台标准化与商家个性化,适合短期促销和快速上新场景。文章还提供了实践建议,帮助自研电商平台或商品中台的开发者选择合适的商品结构,并强调了商品模型在电商系统中的核心作用。通过对比分析,本文旨在为读者提供商品建模的启发和参考。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 13万+

STL:循环删除容器中元素的方法和陷阱

算法大师Donald Knuth:不成熟的优化是一切恶果的根源(Permature optimization is the root of all evil )。 STL中的容器主要是两种:序列式容器和关联式容器。下面讲到的都是我在开发中曾经遇到过的一些问题,有些例子我做了修改,我想初学STL的人基本都会遇到这些问题。序列式容器:vector list string等等关联式容

magictong的专栏 5144

2026华为OD机试 新系统真题题库目录|机考题库 + 算法考点详解

华为OD机试 新系统真题题库目录|机考题库 + 算法考点详解华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,

KJ.JK 4689

STL序列式容器中删除元素的方法和陷阱 二

STL序列式容器中删除元素的方法和陷阱 二 2.使用STL中通用算法或容器成员函数删除元素的方法以上手工编写for循环代码删除容器中元素的方法也有一些问题,如果判断条件特别复杂,又有循环判断的话,循环中间又有异常处理的话,++itVect的位置就要小心放置了,稍不留意就要出错。所以手工编写代码删除容器中元素的方法不太安全,代码重复,也不够优雅,要注意的地方很多。对于这种情况,可以考

hurtmanzc的专栏 1069

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

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

STL序列式容器中删除元素的方法和陷阱一

在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器vector、list中安全删除元素的方法和应该注意的问题,       其它如queue

CyberLogix的专栏 2276

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

转载: STL序列式容器中删除元素的方法和陷阱二 .

2.使用 STL 中通用算法或容器成员函数删除元素的方法 以上手工编写 for 循环代码删除容器中元素的方法也有一些问题,如果判断条件特别复杂,又有循环判断的话,循环中间又有异常处理的话, ++itVect 的位置就要小心放置了,稍不留意就要出错。所以手工编写代码删除容器中元素的方法不太安全,代码重复,也不够优雅,要注意的地方很多。 对于这种情况,可以考虑使用 STL 中通用算法 remvoe...

weixin_34408624的博客 95

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STL序列式容器中删除元素的方法和陷阱 一

STL序列式容器中删除元素的方法和陷阱 一 在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器vector、list中安全删除元素的方法和应该注意的问题,       其它如queue、st

hurtmanzc的专栏 1131

STL序列式容器中删除元素的方法和陷阱(一)

 在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器vector、list中安全删除元素的方法和应该注意的问题, 其它如queue、stack等配接器容器(container adapter),由于

Alvin-He的专栏 1084

STL序列式指针容器中删除元素的方法

在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器vector、list中安全删除元素的方法和应该注意的问题,       其它如queue、stack等配接器容器(container adapte

shuaiqidiudiu的专栏 1603

容器删除元素后迭代器失效_关于STL的erase()陷阱-迭代器失效问题的总结

下面材料整理自Internet&著作。STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。1.list,set,map容器在使用 list、set 或 map遍历删除某些元素时可以这样使用:1.1 正确写法1std::lis...

weixin_35662417的博客 536

STL序列式容器中删除元素的方法和陷阱二

2.使用STL中通用算法或容器成员函数删除元素的方法以上手工编写for循环代码删除容器中元素的方法也有一些问题,如果判断条件特别复杂,又有循环判断的话,循环中间又有异常处理的话,++itVect的位置就要小心放置了,稍不留意就要出错。所以手工编写代码删除容器中元素的方法不太安全,代码重复,也不够优雅,要注意的地方很多。对于这种情况,可以考虑使用STL

CyberLogix的专栏 1555
上一篇: STL序列式容器中删除元素的方法和陷阱二
下一篇: STL关联式容器中删除元素的方法和陷阱四
CyberLogix
博客等级 码龄24年 397粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值