首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高效使用stl::mapstd::set

1、低效率用法 // 先查找是否存在,如果不存在,则插入 if (map.find(X) == map::end()) // 需要find一次 {     map.insert(x); // 需要find...if (map.count(X) > 0) // 需要find一次 {     map.erase(X); // 需要find一次 } else {     // 不存在时处理 } 2、高效率用法...// 解决办法,充分利用inserterase返回值,将find次数降为1 map::size_type num_erased = map.erase(X); // 需要find一次 if (0...== num_erased) {     // 不存在时处理 } else {     // 存在且删除后处理 } pair result_inserted; result_inserted = map.insert...(X); if (result_inserted.second) {     // 不存在,插入成功后处理 } else {     // 已经存在,插入失败后处理     result_inserted.first

2.9K20

工作两年了,还只会用sort进行排序?

(values.begin(),values.end(),pack_inserter(results_1),transmogrify); // 无论何时你使用一个要求指定目的区间算法,确保目的区间已经足够大或者在算法执行时可以增加大小...begin(widgets.begin()); std::vector::iterator end(widgets.end());//方便表示widgets得起点终点 //这个迭代器指示了要找得中等质量得...(0)), v.end()); //改进:用智能指针可以接触以上问题 条款31:实现简单忽略大小写字符串比较 //我怎么使用STL来进行忽略大小字符串比较 //实现1 int.../developer/section/1009828 partial_sum 子范围元素部分 */ //实例1 //带有一对迭代器初始值形式可以返回初始值加由迭代器划分出区间中值 //见...,带有一个初始值与一个任意统计函数,这变得一般很多 //考虑怎么使用accumulate来计算容器中字符串长度 //见3 std::string::size_type stringLengthSum

90020
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】探索STL中高效容器:vector

功能类似于我们之前学习顺序表,它可以在运行时动态调整大小,与C++内置数组相比,提供了更多功能便利性。 ✨vector特点 vector是表示可变大小数组序列容器。...vector可以根据需要自动调整大小,可以在运行时添加或删除元素,而不需要手动管理内存。 就像数组一样,vector也采用连续存储空间来存储元素。...也就是意味着可以采用下标对vector元素进行访问,和数组一样高效。但是又不像数组,它大小是可以动态改变,而且它大小会被容器自动处理。 本质讲,vector使用动态分配数组来存储它元素。...当新元素插入时候,如果空间不够,这个数组需要被重新分配大小,其做法是,分配一个新数组,然后将全部元素移到这个数组。...获取最后一个数据位置reverse_iterator rend 获取第一个数据前一个位置reverse_iterator begin()end()函数通过访问容器第一个最后一个下一位来实现正向迭代器遍历

10100

【Example】C++ 标准库常用容器全面概述

这些容器和数组非常类似,都是在逻辑上连续(但内存不一定是连续),与数组不同是,容器可以非常方便动态管理,而不是固定元素大小 std::vector 当你需要容器时,就找vector!...在现代C++中,主张使用 std::array 替代传统样式数组std::array 提供功能也比 std::vector、std::list 更简单。...因为,它从设计上目的,就是对传统数组进行现代化改造。 具体体现在: 1,它拥有传统数组一样性能、可访问性。 2,它具有传统数组所没有的容器优点:可获取大小、随机访问迭代器、支持赋值等。...所以,当你需要固定大小数组时,应首先考虑 std::array。...返回桶大小 bucket 返回带有特定键桶 load_factor 返回每个桶平均元素数量 max_load_factor 获取或设置每个桶最大元素数。

3.2K30

C++ STL容器算法:详解实例演示

容器 vector vector是一个动态数组,可以在运行时调整大小。它优点在于可以快速地访问元素,缺点是在插入删除元素时需要移动后面的元素。...此外,list还提供了l.empty()l.size()分别判断容器是否为空获取容器大小。 map map是一个键值对容器,可以快速地根据键值查找对应值。...比如,可以使用m.find()查找元素,使用m.insert()插入元素,使用m.erase()删除元素。此外,map还提供了m.empty()m.size()分别判断容器是否为空获取容器大小。...这里使用了vectorbegin()end()函数获取迭代器,也可以使用数组名和数组长度作为参数。 sort默认是升序排序,可以通过第三个参数指定排序规则。...结论 本文介绍了C++ STL中一些常用容器算法,它们可以大大提高开发效率,开发者应该熟练掌握它们使用。除了本文介绍容器算法,STL还提供了很多其他容器算法,可以根据具体需求选择使用

33200

C++从入门到精通(第七篇) :vector深度剖析及模拟实现

vector深度剖析及模拟实现 vector介绍及使用 vector介绍 vector是表示可变大小数组序列容器。 就像数组一样,vector也采用连续存储空间来存储元素。...也就是意味着可以采用下标对vector元素 进行访问,和数组一样高效。但是又不像数组,它大小是可以动态改变,而且它大小会被容器自 动处理。 本质讲,vector使用动态分配数组来存储它元素。...当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新数组,然后将全部元素移到这个数组。...= fifth.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; } vector iterator 使用 begin...v.begin(); // 将有效元素个数增加到100个,多出位置使用8填充,操作期间底层会扩容 // v.resize(100, 8); // reserve作用就是改变扩容大小但不改变有效元素个数

50120

C++打怪 之 vector

简介 ❝Vector类 是在 java 中可以实现自动增长对象数组,vector在C++标准模板库中部分内容,它是一个多功能,能够操作多种数据结构算法模板类函数库。...std; 在用到std变量时,必须对stdname成员分配空间,否则会出现野指针问题,在运行时导致机器宕机。...vector标识符(最大容量) vector标识符(最大容量,初始所有值) vector(const vector&) 复制vector vector(begin,end) 复制数组begin...*/ 1.push_back 在数组最后添加一个数据 2.pop_back 去掉数组最后一个数据 3.at 得到编号位置数据 4.begin 得到数组指针 5.end 得到数组最后一个单元...10.size 当前使用数据大小 11.resize 改变当前使用数据大小,如果它比当前使用大,者填充默认值 12.reserve 改变当前vecotr所分配空间大小 13.erase

1.2K20

2.1 C++ STL 数组向量容器

Vector容器是C++ STL中一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型元素,提供了快速随机访问和在末尾插入或删除元素功能。...2.1 数组向量基础应用如下C++代码,展示了如何使用STLvector容器对数组进行元素添加、弹出、大小重置空间调整等操作,并使用自定义函数MyPrint()输出结果。...在使用迭代器遍历容器时,需要使用begin()end()函数指定迭代器起始位置结束位置,反向遍历使用是rbegin()rend()函数。...使用std::sort()函数对int_array动态数组进行正向排序,排序时使用了int_array->begin()int_array->end()表示排序起始位置结束位置。...在使用迭代器遍历整个vector容器时,需要使用begin()end()函数来指定迭代器起始位置结束位置。

17030

动态数组C++ std::vector详解

1. std::vector std::vector是C++默认动态数组,其与array最大区别在于vector数组是动态,即其大小可以在运行时更改。...2复杂度与 *this 大小成线性,除非分配器不比较相等且不传播,该情况下与 *this other 大小成线性。 3复杂度与 *this ilist 大小成线性。...2.2.3 迭代器 beginendcbegin、cend begincbegin返回指向vector首元素迭代器,endcend返回指向vector末元素后一元素迭代器。...,即对于最大容器 std::distance(begin(), end())。...运行时,可用 RAM 总量可能会限制容器大小到小于 max_size() 值。 capacity capacity函数主要作用是返回当前存储空间能够容纳元素数(即当前分配存储容量)。

45810

2.1 C++ STL 数组向量容器

Vector容器是C++ STL中一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型元素,提供了快速随机访问和在末尾插入或删除元素功能。...2.1 数组向量基础应用 如下C++代码,展示了如何使用STLvector容器对数组进行元素添加、弹出、大小重置空间调整等操作,并使用自定义函数MyPrint()输出结果。...在使用迭代器遍历容器时,需要使用begin()end()函数指定迭代器起始位置结束位置,反向遍历使用是rbegin()rend()函数。...使用std::sort()函数对int_array动态数组进行正向排序,排序时使用了int_array->begin()int_array->end()表示排序起始位置结束位置。...在使用迭代器遍历整个vector容器时,需要使用begin()end()函数来指定迭代器起始位置结束位置。

16420

【C++航海王:追寻罗杰编程之路】vector

1 -> vector介绍及使用 1.1 -> vector介绍 vector文档介绍 vector是表示可变大小数组序列容器; 像数组一样,vector也采用连续存储空间来存储元素。...也就意味着可以采用下标对vector元素进行访问,和数组一样高效。但是又不像数组,它大小是可以动态改变,而且它大小会被容器自动处理; 本质讲,vector使用动态分配数组来存储它元素。...当新元素插入时,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新数组,然后将全部元素移到这个数组。...不同库采用不同策略权衡空间使用重新分配。...对于其他不在末尾删除插入操作,效率更低。比起listforward_list统一迭代器引用更好。 使用STL三个境界:能用、明理、能扩展。

6710

C++ 中 std::string 类

std:: 字符串与字符数组 字符数组只是一个可以由空字符终止字符数组。字符串是定义表示为字符流对象类 字符数组大小必须静态分配,如果需要,不能在运行时分配更多内存。...在字符数组情况下,未使用分配内存被浪费。在字符串情况下,内存是动态分配。可以在运行时按需分配更多内存。由于没有预先分配内存,因此不会浪费任何内存。 如果是字符数组,则存在数组衰减威胁。...由于字符串表示为对象,因此不会发生数组衰减。 实现字符数组是快比std :: string。与实现相比,字符串比字符数组慢。 字符数组不提供很多内置函数来操作字符串。...,该容量可以等于或大于字符串大小。...它需要 3 个参数,目标字符数组,要复制长度开始复制字符串中起始位置。 13. swap()  :- 该函数将一个字符串与另一个字符串交换**。

1.1K20

【c++】vector以及vector模拟实现

vector介绍及使用 1.vector介绍 https://cplusplus.com/reference/vector/vector/ vector是表示可变大小数组序列容器 就像数组一样,...也就是意味着可以采用下标对vector元素进行访问,和数组一样高效。但是又不像数组,它大小是可以动态改变,而且它大小会被容器自动处理 本质讲,vector使用动态分配数组来存储它元素。...当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新数组,然后将全部元素移到这个数组。...不同库采用不同策略权衡空间使用重新分配。...迭代器失效后,代码并不一定会崩溃,但是运行结果肯定不对,如果it不在beginend范围内,肯定会崩溃 // 1.

4910

【c++】标准模板库STL入门简介与常见用法

,即使用算法必须使用容器迭代器。...vector特点:提供了对数组元素快速、随机访问,以及在序列尾部快速、随机插入删除;vector对象在运行时可以动态改变自身大小以便容纳任何数目的元素。...迭代器 begin()end()返回头尾迭代器; rbegin()rend()返回尾头反向迭代器:rbegin()返回最后一个元素迭代器,rbegin++返回倒数第二个元素。...is not empty" << std::endl ;   }        //使用begin, end显示c2所有元素        std::cout << "c2 (using begin,...<< *constIter << std::endl ;        }        //使用size返回c1最大元素大小        std::cout << "c1.size() = " <

69110

【C++修行之道】STL(初识pair、vector)

声明一个vector对象通用语法如下: std::vector vec; 这里T是要存储在vector中元素类型。 容器大小:vector是一个动态数组,可以根据需要自动调整大小。...容器大小管理:可以使用size()函数获取vector中元素数量,使用empty()函数检查vector是否为空,还可以使用resize()函数调整ector大小。...迭代器: vector提供了迭代器,可以用于遍历容器中元素。可以使用begin()函数获取指向第一个元素迭代器,使用end()函数获取指向最后一个元素之后位置迭代器。...(); begin() end(): 返回指向vector第一个元素最后一个元素之后位置迭代器 iterator begin(); const_iterator begin() const;...vec.end()返回指向最后一个元素之后位置迭代器 去重: 要去除vector中重复元素,可以使用std:unique函数。

31110

C++系列笔记(九)

【导读】《21天学通C++》这本书通过大量精小短悍程序详细而全面的阐述了C++基本概念技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等...; reverse(strSample.begin(), strSample.end(),"S"); 字符串大小写转换   要对字符串进行大小写转换,可使用算法 std::transform,它对集合中每个元素执行一个用户指定函数...(),strInput.end(),strInput..begin(),tolower); //转换为小写 转换为大小写也可以直接用toupper(),tolower()函数。...()); 使用数组语法访问vector中元素   使用[]访问vector元素时,面临风险与访问数组元素相同,即不能超出容器边界。...与vector一样,deque也使用运算符[]以数组语法访问其元素。deque与vector不同之处在于,它还允许您使用push_frontpop_front在开头插入删除元素。

1K20

STL之序列式容器(arrayvector)

array array : 一个有 N 个 T 类型元素固定序列。除了需要指定元素类型个数之外,常规数组没有太大差别。显然,不能增加或删除元素。...<< std::endl; return 0; } 4.比较大小 //元素比较 //对 ==,如果两个数组对应元素都相等,会返回 true。...容量大小 //vector 容量大小,是指在不分配更多内存情况下可以保存最多元素个数, //这时 可能有 20 个元素,也可能没有。...; std::cout << "The capacity is" << primes.capacity() << std::endl; //输出语句输出容器大小容董都为 15,这是由初始化列表决定...然而,如果用 push_back() 函数添加一个元素, //然后再输出容器大小容量,这时大小变为 16,容量变为 30。

57920
领券