• cpp中vector动态数组(一种container)的简单用法


       vector<int> num;
        for (int i=0; i<10; ++i)num.push_back(i);
        num.push_back(10);
        num.push_back(10);
        cout << "Original array:
    ";
        //vector<int>::iterator it;  //C++11之前用的,11之后可以用auto
        for (auto it=num.begin(); it!=num.end(); ++it)
        {
            cout << *it << "  ";
        }
        cout << endl;
        num.insert(num.begin()+2,3,10); //在num[2]之前加3个10
        cout << "Inserted array:
    ";
        for (auto it=num.begin(); it!=num.end(); ++it)
        {
            cout << *it << "  ";
        }
        cout << endl;
        //delete 10
        for (auto it=num.begin(); it!=num.end(); ++it)
        {
            if ( *it == 10 )
            {
                num.erase(it); //删除it指向的元素,后it自动指向下一个元素;所以不用移动it了,为了中和 ++it,才有 --it
                --it;
            }
        } // num.erase(remove(num.begin(),num.end(),10),num.end());//这句可以代替上面的整个for循环
        cout << "Deleted 10 array:
    ";
        for (auto it=num.begin(); it!=num.end(); ++it)
        {
            cout << *it << "  ";
        }
    

      

    for (auto it=num.begin(); it!=num.end(); ++it)
     {
         if ( *it == 10 )
         {
             num.erase(it); //删除it指向的元素后,it自动指向下一个元素;所以不用移动it了,为了中和 ++it,才有 --it
             --it;
         }
     }
    或者
    for (auto it=num.begin(); it!=num.end();)
     {
         if ( *it == 10 )
            num.erase(it);
        else
             ++it;
    }
    或者
    num.erase(remove(num.begin(),num.end(),10),num.end());//这句可以代替上面的整个for循环
    

      

    运行结果:

     

    注意:在VS2013中,以下代码会出错

    //delete 10
        for (auto it = num.begin(); it != num.end(); ++it)
        {
            if (*it == 10)
            {
                num.erase(it); //
                --it; // VS2013这会有问题,应该是erase导致的it无效,但使用MinGW g++编译(C++ 11标准)是可以的。
            }
        }
    
    ////// vs2013 下,要这样写 ////
        for (auto it = num.begin(); it != num.end(); ++it)
        {
            if (*it == 10)
            {
                it = num.erase(it); //
                --it; 
            }
        }    
    或
        for (auto it = num.begin(); it != num.end(); )
        {
            if (*it == 10)
            {
                it = num.erase(it); 
            }
            else
                ++it;
        }

    VS2013出现的错误:vector iterator not decrementable。 或者,vector iterators incompatible

     

    成员函数 insert() 用来插入元素:返回 iterator 指向新插入元素的头

    用erase() 来删除某一位置元素,返回 iterator 指向被删除的元素的尾。

    C++98声明:

    iterator erase (iterator position);
    iterator erase (iterator first, iterator last);

    C++11声明:

    iterator erase (const_iterator position);
    iterator erase (const_iterator first, const_iterator last);

    Removes from the vector either a single element (position) or a range of elements ([first,last)).

    而pop_back() 是表示弹出最后一个元素,无参数,无返回值。

    •  vector 的迭代器

    或者:

     

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField
    flask-admin章节一:使用chartkick画报表
    flask-admin众博客概述
    python smtplib发送邮件遇到的认证问题
    python logging模块可能会令人困惑的地方
    Markdown
    SpringBoot-启动过程
    SpringBoot-目录
    AbstractQueuedSynchronizer
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/htj10/p/9194776.html
Copyright © 2020-2023  润新知