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;
        }
    }
  • 相关阅读:
    pgloader 学习(七) 从归档文件加载数据
    pgloader 学习(六) 加载csv 数据
    pgloader 学习(五)pgloader 参考手册
    pgloader 学习(四)一些简单操作例子
    pgloader 学习(三)快速使用
    pgloader 学习(二)特性矩阵&&命令行
    pgloader 学习(一)支持的特性
    使用readthedocs 发布 sphinx doc文档
    pgloader 方便的数据迁移工具
    circus && web comsole docker-compose 独立部署web console 的一个bug
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/4773048.html
Copyright © 2011-2022 走看看