vectorC中的vector讲解_stl的vector能开几维-CSDN博客C vector 容器浅析 | 菜鸟教程函数作用size()返回元素个数empty()判断是否为空空返回 true[]下标访问元素和数组一样front()返回第一个元素back()返回最后一个元素push_back()尾部添加元素emplace_back()尾部就地构造元素效率更高pop_back()删除尾部元素insert()在指定位置插入元素erase()删除指定位置 / 区间元素clear()清空所有元素begin()返回首元素迭代器end()返回尾后迭代器不指向元素resize()改变容器大小多删少补reserve()预分配空间不改变元素个数swap()交换两个 vector 的内容assign()赋值替换原有所有元素data()返回指向底层数组的指针shrink_to_fit()释放多余空间让容量 大小.vectorT 变量名(元素个数, 初始值);#include iostream #include vector using namespace std; int main() { vectorint v {10,20,30}; // 1.front()取首元素 cout v.front() endl; //10 // 2.back()取末尾元素 cout v.back() endl; //30 // 3.push_back尾部追加 v.push_back(40); // [10,20,30,40] // 4.emplace_back原地构造不用拷贝 v.emplace_back(50); // [10,20,30,40,50] // 5.pop_back删掉末尾 v.pop_back(); // [10,20,30,40] // 6.insert(迭代器位置,值) v.insert(v.begin()1, 15); //在下标1插入15 → [10,15,20,30,40] // 7.erase删除单个/区间 v.erase(v.begin()1); //删掉15 →[10,20,30,40] //v.erase(v.begin(),v.begin()2); //删除前两个 // 8.clear全部清空size0capacity不变 //v.clear(); // 9.begin()/end() 迭代器遍历 for(auto it v.begin(); it ! v.end(); it) cout *it ; //10.resize(n) 修改有效元素数量多删少补0 v.resize(6); //不足补0[10,20,30,40,0,0] v.resize(2); //多余截断[10,20] //11.reserve(n) 预开容量不改变size v.reserve(20); //capacity变20元素不变 //12.swap 交换两个vector vectorint v2{9,8}; v.swap(v2); //v:{9,8}, v2:{10,20} //13.assign 覆盖全部内容 v.assign(3,7); //全部替换成3个7 →{7,7,7} //14.data() 返回底层原生数组首指针 int* p v.data(); cout p[0]; return 0; }list函数核心作用size()返回链表的元素个数empty()判断链表是否为空空则返回trueresize(n)修改链表大小为n多余元素删除不足补默认值resize(n, val)修改链表大小为n不足的位置填充valfront()获取链表第一个元素back()获取链表最后一个元素begin()返回指向首元素的迭代器end()返回尾后迭代器不指向任何元素rbegin()返回反向首迭代器从尾部开始遍历rend()返回反向尾迭代器push_back(val)尾部插入元素emplace_back(val)尾部就地构造元素效率更高push_front(val)头部插入元素list 核心优势emplace_front(val)头部就地构造元素insert(it, val)在迭代器it指向的位置前插入元素pop_back()删除尾部元素pop_front()删除头部元素list 核心优势erase(it)删除迭代器it指向的元素clear()清空链表所有元素remove(val)删除链表中所有值等于 val的元素unique()删除链表中连续重复的元素去重splice(it, other)将另一个链表other拼接至当前迭代器位置sort()对链表进行升序排序sort(greaterT())对链表进行降序排序reverse()反转整个链表的元素顺序merge(other)合并两个有序链表set功能代码写法说明刷题要点插入元素st.insert(x);插入 x存在则不变化不会重复返回 pairsecond 标记是否插入成功删除指定值st.erase(x);删除所有值等于 x 的元素set 唯一最多删 1 个元素不存在不会报错删除迭代器位置st.erase(it);删除迭代器it指向元素O(logn)不要 erase (it)查找元素auto it st.find(x);找到返回迭代器找不到返回st.end()判断存在if (st.find(x) ! st.end())计数st.count(x);返回 0 或 1set 元素唯一快速判断是否存在if(st.count(x))清空集合st.clear();清空所有元素集合大小st.size();返回元素个数返回 size_t和数字比较注意类型是否为空st.empty();空返回 true第一个元素*st.begin()最小元素默认升序空集合不能解引用最后一个元素*st.rbegin()或*prev(st.end())最大元素C11 支持 prev下界 xauto it st.lower_bound(x);第一个≥x 的迭代器非常常用找不到返回 end上界 xauto it st.upper_bound(x);第一个 x 的迭代器遍历forfor(auto v : st) { ... }C11 范围 for从小到大遍历只读不能修改 v迭代器遍历for(auto it st.begin(); it ! st.end(); it)顺序遍历用it效率高于it降序 setsetint, greaterint st;从大到小排序begin 是最大值setint st {1,3,5,7}; for (auto it st.begin(); it ! st.end(); it) { cout *it ; }setint st {1,3,5,7}; for (auto x : st) { cout x ; } // 输出1 3 5 7pairC pair的基本用法总结整理_c pair用法-CSDN博客用法代码示例说明定义 pair 对象pairint,string p;第一个模板参数 first 类型第二个 second 类型初始化pairint,string p{10,hello};C11 列表初始化make_pair 构造auto p make_pair(20,test);自动推导类型不用手写模板参数访问成员p.first; p.second;first 取第一个元素second 取第二个元素赋值p make_pair(5,abc);整体赋值pair 支持拷贝赋值pair 作为 map 的元素mapstring,int mp;for(auto item:mp){auto k item.first;auto v item.second;}map/unordered_map 内部存储就是pairconst K,Vpair 放入 vectorvectorpairint,int vec;vec.emplace_back(1,2);vector 存键值对代替小 map比较运算符pairint,int a{1,3},b{2,0};if(a b){}先比 firstfirst 相等再比 second返回值函数返回 pairpairbool,int func(){return {true,100};}函数同时返回 2 个结果C17 结构化绑定auto [x,y] p;直接拆解 pair 两个值语法糖emplace_back 插入 pairvec.emplace_back(3,4);直接构造不需要手动 make_pairmapC Map常见用法说明_c map用法-CSDN博客功能示例代码说明定义 mapmapstring, int mp;key:stringvalue:int插入元素mp.insert({mac01, 5});insertkey 存在则不覆盖旧值下标插入 / 修改mp[mac02] 10;key 存在则覆盖 valuekey 不存在直接新增判断 key 是否存在if(mp.count(mac01) ! 0)count 返回 1 存在0 不存在O (logN)查找获取迭代器auto it mp.find(mac01);找到返回迭代器找不到返回mp.end()通过迭代器取 key、valueit-first; it-second;firstkeysecondvalue删除按 keymp.erase(mac01);删除 key 对应的整条记录删除按迭代器mp.erase(it);删除迭代器指向元素it 失效获取大小mp.size()返回键值对数量判空mp.empty()为空返回 true清空全部元素mp.clear()清空所有 key‑value遍历范围 forfor(auto item : mp){auto k item.first;auto v item.second;}按 key 从小到大遍历迭代器遍历for(auto itmp.begin();it!mp.end();it)begin 最小 keyend 尾后迭代器C17 结构化绑定遍历for(auto [k,v] : mp){}直接拆解 key、value获取值find 安全版本auto it mp.find(mac01);if(it!mp.end()){ int val it-second; }推荐不会插入新元素下标取值注意int val mp[mac01];❗key 不存在会自动插入一条默认 value 记录mapstring,int mp; int x mp[aaa]; // 即使只想读也会插入 (aaa,0)改变容器map 只对key 排序value 不参与排序不能通过 value 找最小必须手写循环。map 里面的 pair 是pairconst K,Vitem.first(key)不能改item.second(value)可以修改stackpop()函数只删除栈顶元素不返回该元素的值。如果需要获取栈顶元素并删除需先调用top()获取值再调用pop()删除queuehttps://blog.csdn.net/Maysheeo/article/details/149908000deque函数作用push_back(x)尾部插入元素push_front(x)头部插入元素emplace_back(x)尾部就地构造效率更高emplace_front(x)头部就地构造效率更高pop_back()删除尾部元素pop_front()删除头部元素front()获取队头元素back()获取队尾元素size()返回元素个数empty()判断是否为空resize(n)修改大小为 nclear()清空所有元素operator[]下标随机访问如dq[2]at(i)安全访问越界抛异常begin()返回首迭代器end()返回尾迭代器priority_queue【C】STL——容器适配器priority_queue(优先级队列)详解 及 仿函数的介绍和使用-腾讯云开发者社区-腾讯云C 容器类 priority_queue | 菜鸟教程https://zhuanlan.zhihu.com/p/679669848函数作用示例.push(x)插入元素 x自动堆化q.push(5);.top()获取堆顶元素最值不删除int val q.top();.pop()删除堆顶元素无返回值q.pop();.empty()判断堆是否为空空返回 trueif (!q.empty()).size()返回堆内元素个数int sz q.size();unordered_set唯一性元素值唯一重复插入会被忽略。无序性元素不按特定顺序存储遍历顺序不确定。高效查找哈希表实现平均O(1)时间复杂度完成插入、删除、查找。迭代器类型提供双向迭代器但反向遍历无意义因元素无序。操作函数功能作用insert(val)插入元素 valemplace(val)原地构造插入效率更高erase(val)删除值为 val 的元素erase(iterator)删除迭代器指向的元素clear()清空所有元素find(val)查找 val返回迭代器找不到返回 end ()count(val)判断 val 是否存在存在返回 1不存在返回 0size()返回容器中元素个数empty()判断容器是否为空begin()返回指向第一个元素的迭代器end()返回尾后迭代器不指向元素cbegin()返回常量首迭代器cend()返回常量尾后迭代器unordered_map键值对存储键唯一不可重复平均时间复杂度查找 / 插入 / 删除O(1)无序遍历顺序不固定函数核心作用empty()判断哈希表是否为空空则返回truesize()返回哈希表中键值对的个数operator[](key)通过键访问值键不存在则自动插入默认值初始化at(key)安全访问键对应的值键不存在会抛出异常insert({key, value})插入一组键值对键已存在则不覆盖emplace(key, value)就地构造键值对插入效率比insert更高erase(key)删除指定键对应的键值对erase(iterator)删除迭代器指向的键值对clear()清空哈希表所有元素find(key)查找指定键返回对应迭代器找不到返回end()count(key)判断键是否存在存在返回1不存在返回0begin()返回指向首元素的迭代器end()返回尾后迭代器不指向任何元素cbegin()返回常量首迭代器cend()返回常量尾后迭代器reserve(n)预分配n个元素空间减少扩容次数string函数写法功能说明示例代码string s;string s(abc);string s(n, ch);构造字符串1. 空串2. 用字符串初始化3. n 个重复字符string a;string b(hello);string c(5, x); // xxxxxs.size()s.length()获取字符串有效字符长度两者完全等价string s 1234;int len s.size(); // len4s.empty()判断字符串是否为空空返回 trueif (s.empty()) cout 空字符串;s.clear()清空字符串变为空串s.clear(); // s s xxxs a字符串拼接追加内容string s ab;s cd; // sabcds e; // sabcdes.push_back(c)末尾追加单个字符只能 chars.push_back(z);s.pop_back()删除最后一个字符无返回值string sabc; s.pop_back(); // sabs.substr(pos, len)截取子串pos 起始下标len 截取长度省略 len 则截取到末尾string s abcdef;s.substr(1,3); // bcds.substr(2); // cdefs.erase(pos, len)删除从 pos 开始删 len 个字符只传 pos删到末尾string sabcdef;s.erase(1,2); // 删除bc → adefs.replace(pos, len, newStr)从 pos 起删除 len 个字符替换为新字符串string sa123d;s.replace(1,3,bc); // abcds.find(str)正向查找子串 / 字符返回首次出现下标找不到返回string::nposstring sabcb;int pos s.find(cb); // pos2if (s.find(x) string::npos) 无匹配s.rfind(str)反向查找返回最后一次出现下标s.rfind(b); // 3s.compare(t)比较字符串st 返回 0st 返回负数st 返回正数if (s.compare(abc) 0) 相等s[n]/s.at(n)访问下标 n 字符[]不越界检查at()越界抛异常char c s[0];char d s.at(1);s.insert(pos, str)在 pos 下标处插入字符串string sad;s.insert(1,bc); // abcdstoi(s)string 转 int纯数字字符串string num 123; int x stoi(num);to_string(val)数字 (int/double 等) 转 stringstring s to_string(666); // 666algorithm函数作用find(begin,end,val)查找第一个等于 val 的元素返回迭代器找不到返回 endfind_if(begin,end,pred)查找第一个满足谓词 pred 的元素find_if_not(begin,end,pred)查找第一个不满足 pred 的元素count(begin,end,val)统计等于 val 的元素个数count_if(begin,end,pred)统计满足谓词的元素个数binary_search(begin,end,val)有序区间判断 val 是否存在返回 boollower_bound(begin,end,val)有序区间第一个≥val 的迭代器upper_bound(begin,end,val)有序区间第一个 val 的迭代器equal_range(begin,end,val)返回 pairlower,upperval 的范围函数作用sort(begin,end)快速排序升序可传自定义比较器sort(v.begin(),v.end(),greaterint())stable_sort(begin,end)稳定排序相等元素相对顺序不变partial_sort(beg,mid,end)部分排序前 mid‑beg 个元素排好序nth_element(beg,nth,end)把 nth 位置放到它最终排序后的位置左右不一定有序找第 k 大 / 小is_sorted(begin,end)判断区间是否有序返回 boolpartition(begin,end,pred)把满足 pred 放左边不满足放右边不稳定stable_partition(begin,end,pred)分区保持组内相对顺序函数作用copy(src_beg,src_end,dst_beg)拷贝到目标迭代器目标要足够空间常配合back_insertercopy_if(src_beg,src_end,dst_beg,pred)拷贝满足条件的元素fill(begin,end,val)全部填充 valfill_n(begin,n,val)从 begin 开始 n 个元素赋值 valgenerate(begin,end,gen_func)用生成函数给每个元素赋值generate_n(begin,n,gen_func)生成 n 个replace(begin,end,old_val,new_val)把等于 old_val 替换成 new_valreplace_if(begin,end,pred,new_val)满足条件就替换swap(a,b)交换两个对象iter_swap(it1,it2)交换两个迭代器指向元素