首页 > 代码库 > 容器初始化、赋值、关系运算

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

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

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

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