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;
        }
    }
  • 相关阅读:
    debian配置apache2.4配置虚拟主机遇到的问题
    Javascript关于attachEvent和addEventListener区别与兼容写法
    图解linux下top命令的使用
    idea报错:java 不支持发行版本5
    java-访问权限
    IDEA图标含义
    IDEA生成UML类图
    idea快捷键
    idea同时运行两个main()
    idea关闭vim编辑模式
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/4773048.html
Copyright © 2011-2022 走看看