zoukankan      html  css  js  c++  java
  • 删除元素【C++】顺序容器 Vector 注意事项

    时间紧张,先记一笔,后续优化与完善。

        引用头文件

        

    #include <vector>

        

        一、操作数据

        主要有下列几种方法:

    vector<int> vecSalary;
        //1.直接添加
        vecSalary.push_back(2000);
        vecSalary.push_back(3000);
        //2.按位置添加
        vecSalary.insert(vecSalary.begin(), 1000);
        vecSalary.insert(vecSalary.end(), 4000);
        //删除vector容器中的前三个元素
        vecSalary.erase(vecSalary.begin(), vecSalary.begin() + 3);
        //清空数据
        vecSalary.clear();

        

        二、应用说明

        1)容器中保存的是指针对象,这需要应用完毕后,释放这些指针所指向的对象

    vector<Employee*> vecEmployee;
        //操作容器数据
        ...
        //应用完后,释放指针对象
        for (vector<Employee*>::iterator it = vecEmployee.begin(); it != vecEmployee.end(); ++it)
        {
            if (NULL != *it)
            {
                delete *it;
            }
            *it = NULL;
        }
        每日一道理
    虽然你现在还只是一株稚嫩的幼苗。然而只要坚韧不拔,终会成为参天大树;虽然你现在只是涓涓细流,然而只要锲而不舍,终会拥抱大海;虽然你现在只是一只雏鹰,然而只要心存高远,跌几个跟头之后,终会占有蓝天。

        2)应用迭代器删除容器中的数据元素需谨慎

        vector.erase(pos) :vector删除位置为pos的值

        此时为坚持容器内存连续性,vector前面的元素会主动向前移动一个位置,迭代器这时候实际指向的是被删除元素后的第一个元素。

        中间跳过了一个元素,这就极可能形成遗漏某些元素的检查而致使删除不完全。

        正确删除方法

    for (vector<int>::iterator it  = vecSalary.begin(); it != vecSalary.end();)
        {
            //遇到符合条件的删除
            if (*it > 1000)
            {
                it = vecSalary.erase(it);
            }
            else
            {
                ++it;
            }
        }

        附加 :C++0x中for_each()算法遍历

        

    typedef vector<int> VEC_INT;
    
    void printInt(int &it)
    {
    	if (it % 5 == 0)
    	{
    	   cout<<it<<" ";
    	}	
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	VEC_INT vecInt;
    	int i = 1;
    	for (int  i = 1; i < 100; ++i)
    	{
    	   vecInt.push_back(i);
    	}
    	for_each(vecInt.begin(),vecInt.end(), printInt);
    	return 0;
    }

    文章结束给大家分享下程序员的一些笑话语录: 自从有了Photoshop,我再也不相信照片了!(没有Photoshop的年代,胶片照片年代做假的也不少,那时候都相信假的!)

  • 相关阅读:
    基于tensorflow的简单线性回归模型
    msm8909平台JEITA配置和bat-V therm表合入
    开始点滴积累
    消息队列中间件(一)介绍
    Ubuntu18 的超详细常用软件安装
    IO通信模型(三)多路复用IO
    IO通信模型(二)同步非阻塞模式NIO(NonBlocking IO)
    IO通信模型(一)同步阻塞模式BIO(Blocking IO)
    Web笔记(二)Tomcat 使用总结
    const in C/C++
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3086087.html
Copyright © 2011-2022 走看看