容器主要分为:顺序容器和关联容器
顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque双向队列与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值, 还有unorder_multimap等。
顺序容器
vector
/*
* 什么是vector, vector的特点
* vector类似一个动态数组,是一段地址连续的空间
* vector和array的区别:vector支持动态空间调整,随着元素的增加,大小会改变
*/
// 初始化: vector<int> v; vector<int> v2(10); // 可以容纳10个int vector<int> v3(10, 2); // 10个2 vector<int> v4(v2); int arr[4] = {1,2,3,4}; vector<int> v5(arr, arr+4); // 其他操作, 是vector容器自带的函数,不包含全局的算法(find查找,remove_if删除等) // 添加元素 vec.push_back(3); // 在最后添加元素 insert(); /* iterator insert( iterator loc, const TYPE &val ); void insert( iterator loc, size_type num, const TYPE &val ); void insert( iterator loc, input_iterator start, input_iterator end ); insert() 函数有以下三种用法: 在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 在指定位置loc前插入num个值为val的元素 在指定位置loc前插入区间[start, end)的所有元素 . */ // 删: // erase iterator erase( iterator loc ); iterator erase( iterator start, iterator end ); // erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. // 返回值是指向删除的最后一个元素的下一位置的迭代器.例如: vec.clear(); // 清空容器 vec.pop_back(); // 移除尾部元素,无返回值 // 查 vec.back(); // 返回最有一个元素的引用 vec.begin(); // 返回当前容器首元素的迭代器 vec.end(); // 尾后迭代器 vec.rbegin(); // rbegin函数返回指向当前vector末尾的逆迭代器 vec.rend(); // rend()函数返回指向当前vector起始位置的逆迭代器. 类似与begin和end 其他 vec.empty(); // 判断是否为空 vec.capacity(); // 返回当前vector在重新进行内存分配以前所能容纳的元素数量. // reserve()函数为当前vector预留至少共容纳size个元素的空间 // void resize( size_type size, TYPE val ); vec.resize(); // resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val vec.size(); // 返回当前所容纳的元素个数 // vec.swap(vec2) // vec和vec2交换 // 遍历: void print(vector<int>& vec) { for (int i = 0; i < vec.size(); i++) cout << vec[i] << " "; for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) { cout << *it << " "; } for (auto item : vec) { cout << item << " "; } cout << endl; }