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.关系运算符
- 相同类型的容器
- 保存相同类型的元素
- 元素类型也定义了相应的比较运算符