• 容器初始化、赋值、关系运算


    1.vector初始化方法

    1.1vector、list、deque、string初始化方法

    //四种初始化方法
        //初始化方法1
        //1.10个1;
        vector<int> vec1(10, 1);
        vector<int> vec2{0,1,2};//列表初始化
        vector<int> vec3;
    
        //2.初始化方法2
        //2.1要求有相同的容器类型和元素类型
        vec3 = vec2;//拷贝初始化
        
        //3.初始化方法3
        //3.1同vec2
        vector<int> vec4 = { 0, 1, 2, 3, 4 };
    
        //4.初始化方法4
        //4.1要求元素类型相同
        vector <int> vec5(vec2.crbegin(), vec2.crend());

    1.2 array初始化方法,c中数组概念不支持拷贝,但是容器array支持赋值操作,具体如下:

    array<int, 10> digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    array<int, 10> copy = digits;

    2.赋值运算

    •  由于其旧元素被替换,因此传递给assign的迭代器不能指向调用assign的容器
    names.assign(names.cbegin(),names.cend())  //同一个容器names
    • 赋值相关运算会导致指向左边容器内部的迭代器、引用、指针失效。而swap操作将容器内容交换不会导致容器的迭代器、引用和指针失效,下面的程序可以正常编译运行
        //验证使用swap不改变迭代器、指针、引用,而赋值改变
        vector<int> vec1{ 5, 6, 7, 8, 9};
        vector<int> vec2{ 0, 1, 2, 3, 4, 5, 6 };//列表初始化
        vector<int> vec3;
    
        //1.用swap进行赋值运算,交换vec1和vec2
        vec1.swap(vec2);
        for (vector<int>::iterator it = vec1.begin(); it!= vec1.end(); ++it)
        {
            cout << *it << " ";
        }
        cout << endl;
        //2.直接赋值vec3 =vec2
        vec3 = vec2;
        for (vector<int>::iterator it = vec3.begin(); it != vec3.end(); ++it)
        {
            cout << *it << " ";
        }
    • 容器的assign赋值
    //1.10个1;
        vector<int> vec1(10, 1);
        vector<int> vec2{0,1,2,3,4,5,6,7,8,9};//列表初始化
        vector<int> vec3{0,1,2};
    
        //2.初始化方法2和赋值
        //2.1要求有相同的容器类型和元素类型
        //vec3 = vec2;//拷贝初始化
        swap(vec3, vec2); //vec2{0,1,2};vec3{0,1,2,3,4,5,6,7,8}
    
        //3.初始化方法3
        //3.1同vec2
        vector<int> vec4 = { 0, 1, 2, 3, 4 };
    
        //4.初始化方法4
        //4.1要求元素类型相同
        vector <int> vec5(vec2.crbegin(), vec2.crend()); //vec5{2,1,0}
    
        //5.初始化方法和赋值
        //swap函数
        vector<int> vec6;
        vec6.swap(vec5);//vec5{};vec6{2,1,0}
        
        //6.初始化方法和赋值
        //assign
        vector<int> vec7;
        //6.1两个迭代器间隔赋值{2,3,4,5,6,7}
        vec7.assign(vec3.cbegin() + 2, vec3.cend() - 2);
        //将元素替换为初始化列表i1中的元素
        vector<int> vec8;
        vec8.assign(10, 2);

    3.关系运算符

    • 相同类型的容器
    • 保存相同类型的元素
    • 元素类型也定义了相应的比较运算符
  • 相关阅读:
    改变JupyterLab的启动路径
    副业创收的误区,为啥你总掉进坑里[转]
    消费主义陷阱[转]
    排列组合生成算法CombinationAll
    nlp跳坑基础
    通俗易懂告诉你CPU/GPU/TPU/NPU...XPU都是些什么鬼?
    Shotcuts in linux terminal for typing commands 各类终端的快捷键
    Python Why?
    2020年15.5以后的QT入坑指南
    PreparedStatement的用法
  • 原文地址:https://www.cnblogs.com/lwflourish/p/4204457.html
Copyright © 2020-2023  润新知