zoukankan      html  css  js  c++  java
  • STL删除元素

    1、从vector中删除多个元素:

    #include <iostream>
    #include <vector>
    
    int main()
    {
        std::vector<int> vect;
        for(int i = 1; i <= 100; i++)
        {
            vect.push_back(i);
        }
    
        ///*
        int size = vect.size();
        for(unsigned int i = 0; i < size;)
        {
            if(vect[i] % 2 == 1)
            {
                vect.erase(vect.begin() + i);
                size--;
            }
            else
            {
                i++;
            }
        }
        //*/
        /*
        auto it = vect.begin();
        while(it != vect.end())
        {
            if(*it % 2 == 1)
            {
                vect.erase(it);
            }
            else
            {
                it++;
            }
        }
        */
    
        for(auto& item : vect)
        {
            std::cout<<"item:"<<item<<std::endl;
        }
    int main()
    {
        std::vector<int> vect;
        for(int i = 1; i <= 100; i++)
        {
            vect.push_back(i);
        }
    
        ///*
        int size = vect.size();
        for(unsigned int i = 0; i < size;)
        {
            if(vect[i] % 2 == 1)
            {
                vect.erase(vect.begin() + i);
                size--;
            }
            else
            {
                i++;
            }
        }
        //*/
        /*
        auto it = vect.begin();
        while(it != vect.end())
        {
            if(*it % 2 == 1)
            {
                vect.erase(it);
            }
            else
            {
                it++;
            }
        }
        */
    
        for(auto& item : vect)
        {
            std::cout<<"item:"<<item<<std::endl;
        }
    }

    std::vector可以越界访问,如以下代码会输出0,而不会抛出异常。应该是由vector建立时的容量决定的。

    #include <iostream>
    #include <vector>
    
    int main()
    {
        std::vector<int> vect;
        vect.push_back(1);
        vect.push_back(2);
        std::cout<<vect[3]<<std::endl;
    }

    定义一个返回引用的函数,但如果接收的类型没有定义为引用类型,则仍会是复制,auto也是复制。如下:

    #include <iostream>
    #include <vector>
    
    class Test
    {
        Test(){};
        public:
            static Test& Instance()
            {
                static Test _instance;
                return _instance;
            }
            std::vector<int>& get_vect()
            {
                return vect;
            }
    
            std::vector<int> vect;
    };
    
    int main()
    {
        Test::Instance().vect.push_back(1);
        Test::Instance().vect.push_back(2);
    
        std::vector<int> vect = Test::Instance().get_vect();        //复制
        //std::vector<int>& vect = Test::Instance().get_vect();     //引用
    
        vect.push_back(1);
        vect.push_back(2);
    
        for(auto item : Test::Instance().vect)
        {
            std::cout<<item<<std::endl;
        }
    }
  • 相关阅读:
    5 输出的properties文件按照key进行排序
    JFinal 部署在 Tomcat 下推荐方法(转)
    15个必须知道的chrome开发者技巧(转)
    一次完整的浏览器请求流程(转)
    工作第一天
    Struts2的crud
    equal 和 ==
    生成Apk遇到的问题
    Http Framework
    Gradle: The New Android Build System
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/4773048.html
Copyright © 2011-2022 走看看