lwflourish

哪怕自己是一个菜鸟,也要努力使自己展翅高飞
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2015-01-06 10:21  lwflourish  阅读(287)  评论(0编辑  收藏  举报

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.关系运算符

  • 相同类型的容器
  • 保存相同类型的元素
  • 元素类型也定义了相应的比较运算符