• Vector容器


    vector 是将元素置于一个动态数组中的加以管理的容器。

    vector可以随机存取元素(支持索引直接存取,用[]操作符或at()方法,后面会详细概述

    vector 尾部添加或移除元素非常快速,但是在中间或者头部插入元素或移除元素比较费时

    具体参考:

    https://blog.csdn.net/weixin_41743247/article/details/90635931

    vector的添加和删除:

     1         vector<int> v1;
     2     cout << "length : " << v1.size() << endl;
     3     v1.push_back(1);
     4     v1.push_back(2);
     5     v1.push_back(3);
     6     //修改头部元素的值
     7     //函数返回值当左值 应该返回一个引用
     8     v1.front() = 11;
     9     v1.back() = 55;
    10     cout << "length : " << v1.size() << endl;
    11     //获取头/尾部元素
    12     cout << "头部元素 : " << v1.front() << endl;        

    vector的初始化:

    1     vector<int> v1;
    2     v1.push_back(1);
    3     v1.push_back(3);
    4     v1.push_back(5);
    5     v1.push_back(7);
    6 
    7     vector<int> v2 = v1;//对象初始化
    8     vector<int> v3(v1.begin(), v1.begin() + 2);
    9     vector<int> v4(3, 9);//存放三个9;

    vector的数组遍历:

     1 void printV(vector<int>& v)
     2 {
     3     for (int i = 0; i < v.size(); i++)
     4     {
     5         cout << v[i] << " ";
     6     }
     7 }
     8 void main33()
     9 {
    10     //通过数组的方式遍历
    11     vector<int> v1(10);//通过数组方式赋值:需要把内存准备好
    12     for (int i = 0; i < 10; i++)
    13     {
    14         v1[i] = i + 1;
    15     }
    16     //for (int i = 0; i < 10; i++)
    17     //{
    18     //    cout << v1[i] << " ";
    19     //}
    20     printV(v1);
    21 }
    22 int main()
    23 {
    24     main33();
    25 
    26 
    27     system("pause");
    28     return 0;
    29 }

    push_back原理

        vector<int> v1(10);
        v1.push_back(100);
        v1.push_back(200);
        cout << "size: " << v1.size() << endl;
        printV(v1);

    可以知道 push_back 是从vector数组的最后开始插入,并且插入一次就增加一个元素。(上述程序中数组增加了2个元素的大小)。

     使用迭代器遍历:

    //1  迭代器 end()的理解
    //1   3   5
    //////当it == v1.end()的时候,说明这个容器已经遍历完毕了
    //end()的位置 应该是5的后面
    
    
    //2.迭代器的种类 vector中有正向迭代器 和 逆向迭代器
    void main35()
    {
        vector<int> v(10);
        for (int i = 0; i < 10; i++)
        {
            v[i] = i + 1;
    
        }
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << *it << " ";
        }
    
        //逆向遍历 用vector提供的逆向迭代器
        for (vector<int>::reverse_iterator rit = v.rbegin(); rit != v.rend(); rit++)
        {
            cout << *rit << " ";
        }
    }

     vector  删除和插入

        vector<int> v(10);
        for (int i = 0; i < 10; i++)
        {
            v[i] = i + 1;
    
        }
        //区间删除
        v.erase(v.begin(), v.begin() + 3);
        printV(v);
        //根据元素的位置 指定位置删除
        v.erase(v.begin());//在头部删除元素
        printV(v);
    
        //根据元素的值删除
        v[1] = 2;
        v[3] = 2;
    
        printV(v);
        for (vector<int>::iterator it = v.begin(); it != v.end(); )
        {
            if (*it == 2)
            {
                it = v.erase(it);//当删除迭代器所指向的元素的时候,erase函数会让it自动下移
            }
            else
            {
                it++;
            }
        }
        printV(v);
    
        v.insert(v.begin(), 100);//头插法
        v.insert(v.end(), 200);//尾插法
        printV(v);
  • 相关阅读:
    JavaScript高度和宽度详解
    VC6程序图标
    VC++中的Dlg,App,Doc,view
    Vista桌面图标无法拖动
    VC2008中IE8脚本错误问题解决
    单文件安装包制作(转)
    AutoResetEvent与ManualResetEvent区别
    纯JavaScript中调用WebServices
    动态加载程序集Assembly.Load
    VC++小知识积累
  • 原文地址:https://www.cnblogs.com/ymj11/p/13805077.html
Copyright © 2020-2023  润新知