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;
    }
}
原文地址:https://www.cnblogs.com/tianyajuanke/p/4773048.html