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

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

capacity 返回在不分配更多的内存的情况下vector可以包含的元素数。(当前内存空间) cbegin 返回指向vector中起始位置的常量迭代器。...std::unordered_set unordered_set 哈希表 Key = Value No 无 std::unordered_multiset unordered_set 哈希表 Key =...每个元素同时用作排序和值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。...at 查找具有指定键值的元素。...每个元素存储两个对象,包括一个排序和一个值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。

3.2K30

C++系列笔记(十)

【导读】《21天学通C++》这本书通过大量精小短悍的程序详细而全面的阐述了C++的基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等...STL集合类   容器 set和 multiset让程序员能够在容器中快速查找是存储在一维容器中的值。set和multiset之间的区别在于,后者可存储重复的值,而前者只能存储唯一的值。...在set和multiset中查找元素 诸如set、multiset、map和multimap等关联容器都提供了成员函数find(),它让您能够根据给定的查找值: auto iElementsFound...STL提供的容器类std::unordered_set就是基于散列的set。...要使用STL容器std::unordered_setstd::unordered_multiset,需要包含头文件:#include相比于std

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

C++常见避坑指南

这里顺带回顾下C++ std::string常见的字符串查找的方法: std::string::find 用于在字符串中查找指定的子字符串。...可用来检查字符串中是否包含指定的某些字符或者查找字符串中第一个出现的特定字符 std::string::find_first_not_of 用于查找字符串中第一个不与指定字符集合中的任何字符匹配的字符,...可以用来检查字符串中是否包含指定的某些字符,或者查找字符串中最后一个出现的特定字符 std::string::find_last_not_of 用于查找字符串中最后一个不与指定字符集合中的任何字符匹配的字符...除了以上几个方法外,还有查找满足指定条件的元素std::find_if, std::find_if 是 C++ 标准库中的一个算法函数,用于在指定范围内查找第一个满足指定条件的元素,并返回其迭代器。...执行控制块包括对关联资源的引用计数以及弱引用计数等。

27510

千万不要错过的后端【纯干货】面试知识点整理 I I

(use_count方法),每个shared_ptr的拷贝都指向同一块内存,在最后一个shared_ptr被析构的时候,内存才会被释放 shared_ptr 是引用计数的方式,使用use_count查看计数...next; next->_pre = cur; } Cur 和 next 存在循环引用,他们的引用计数都变为 2 出了作用域之后,cur 和 next 被销毁,引用计数减 1 因此要释放cur...helgrind helgrind查找多线程程序中的竞争数据。 helgrind查找内存地址,那些被多于一条线程访问的内存地址,但是没有使用一致的锁就会被查出。...std::bin d封装可执行对象 防止头文件重复引用: #ifndef 作用:相同的两个文件不会被重复包含。...优点: 受C/C++语言标准的支持,不受编译器的限制。 不仅仅局限于避免同一个文件被重复包含,也能避免内容完全相同的两个文件(或代码片段)被重复包含

75830

重温C++的设计思想

std的智能指针(std::unique_ptr,std::shared_ptr),使用智能指针目的之一是减少对象的拷贝:对超出作用域的对象进行释放。...std::move(ptr)是个右值引用。等价于static_cast&&>(ptr)。 2.3 内存对象的局部性 C++的对象缺省为值语义。...3.4 关联容器 c++的关联容器(set,map,multiset,multimap)是有序的,而在别的语言通常是无序的。名字带multi的允许重复。不带的不允许重复。...五、标准泛型算法 c++的标准泛型算法: sort:排序 reverse:反转 count:计数 find:查找 max:最大值 min:最小值 minmax:最小值和最大值 next_permutation...六、其他 constexpr和const是编译期常量和运行期常量的意思 lambda表达式:以一对中括号开始,不需要说明返回值(类似auto)

1.6K247

C++进阶:详细讲解容器set与map(pair、multiset、multimap)

1.关联式容器与序列式容器 关联式容器和序列式容器是 C++ 中两种不同的容器类型 关联式容器: 关联式容器主要包括 std::set, std::map, std::multiset, std:...这种结构允许通过来检索和关联对应的值,key代表键值,value表示与key对应的信息 2.1pair定义 std::pair 是C++标准库中提供的一个简单的键值对实现。...const_iterator find(const key_type& k) const; 在常量 map 中查找键值为 k 的元素,并返回一个指向该元素的迭代器。...5.3.4 [] 读取元素:当使用 [] 运算符时 如果指定的存在于 map 中,则返回与该关联的值 如果不存在,则会插入一个新的键值对,为指定的,值为默认构造的对应值类型的默认值,并返回该默认值的引用...插入元素:当使用 [] 运算符向 map 中插入元素时 如果指定的不存在,则会创建一个新的键值对,为指定的,值为指定的值,并返回该值的引用 如果已经存在,则直接返回对应的值的引用

15510

重温 CC++ 笔记

前者是指向常量的指针,后者指向的是变量,但指针是常量 shared_ptr 的行为最接近原始指针,但不能滥用 shared_ptr 有少量的成本,而且有无法克服的循环引用风险,需要搭配 weak_ptr...指针是内存地址,引用是变量别名,指针可以是空,而引用不能为空(引用必须初始化,否则编译失败) 引用是通过指针常量实现的 指针完全映射了计算机硬件,操作效率高,是 C++ 效率高的根源。...可以查看有几个引用引用为 0 时,才会 delete 内存 make_shared() 还可以定制内存删除函数 缺点: 引用计数的存储和管理都是成本 在运行阶段,引用计数的变动很复杂,很难知道它真正释放资源的时机...一旦 shared_ptr 在某个不确定时间点析构释放资源,就会阻塞整个进程或者线程 可能遇到循环引用导致计数始终不为 0,无法 delete 内存 weak_ptr 专门为打破循环引用设计,只观察引用...g++ -I 包含查找路径? json, messagePack, pb 都敲一下 为什么需要序列化,不能直接 memcpy 吗?

1.2K30

C++ Qt开发:使用关联容器类

键值对存储: 存储键值对,每个关联一个值。 性能: 插入和查找操作的平均复杂度是 O(log n),适用于需要按键排序并进行频繁查找的场景。...value(const Key &key) const 返回指定的值。 contains(const Key &key) const 判断是否包含指定。...使用场景: 适用于需要键值对有序且唯一的场景。 QMultiMap 允许重复: QMultiMap 中可以包含重复的,即多个可以映射到相同的值。...唯一: 每个在 QHash 中是唯一的,不允许重复。 性能: 插入和查找操作的平均复杂度是 O(1),适用于需要快速插入和查找的场景。...1.3 QSet QSet 是 Qt 中的无序关联容器,类似于 C++ 标准库的 std::unordered_set。它主要用于存储唯一值,而不关心元素的顺序。

26510

C++系列笔记(十一)

::pair来指定要插入的和值:mapIntToString.insert(pait(1000,"One Thousand")); 在map或multimap查找元素 find...调用erase函数时将作为参数,这将删除包含指定的所有-值对: mapObject.erase(key); erase函数的另一种版本接受迭代器作为参数,并删除迭代器指向的元素: mapObject.erase...值对容器std::unordered_map 要使用这个模板类,需要包含头文件#include unordered_map的平均插入和删除时间是固定的,查找元素的时间也是固定的...从使用的角度看,这两种容器与std::map和std::multimap差别不大,可以类似的方式执行实例化、插入和查找。...引用计数智能指针 引用计数是一种记录对象的用户数量的机制。当计数降低到零后,便将对象释放。因此,引用计数提供了一种优良的机制,使得可共享对象而无法对其进行复制。

1.3K20

C++C++ 引用详解 ⑧ ( 普通引用常量引用 | 常量引用概念与语法 )

一、普通引用 1、概念说明 之前的 【C++C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义...普通引用代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace...: error C3892: “b”: 不能给常量赋值 2、常量引用概念与语法 在 C++ 语言中 , " 常量引用 " , 英文名称为 Const Reference , 是一种引用类型 , 另外一种引用就是...常量引用 b 修改 变量 a 的值 , 则会报错 : error C3892: “b”: 不能给常量赋值 错误代码示例 : // 包含 C++ 头文件 #include "iostream" //...d\n", b); // 修改 常量引用 b 的值 // 报错 : error C3892: “b”: 不能给常量赋值 b = 20; // 控制台暂停 , 按任意继续向后执行 system

19210

CC++面试题之语言基础篇(二)

准备C/C++面试需要深入研究语言基础知识,掌握控制流结构、函数、指针和标准库,同时准备好回答各种与C/C++编程相关的问题,这将有助于你在面试中脱颖而出。...node2 node2->next = node1; // node2 引用 node1 // 循环引用,node1 和 node2 的引用计数永远不会降为零 return...大小:静态链接库包含库的副本,因此可执行文件通常较大。而动态链接库的多个程序可以共享相同的库,因此可执行文件较小。...其他 多线程支持:引入std::thread、std::mutex、std::condition_variable等多线程库,使C++更好地支持并发编程。...标准库改进:引入了许多新的标准库容器和算法,如std::unordered_map、std::unordered_setstd::array,以及更多的标准算法。

13510

C++【初识哈希】

因此在 C++11 标准中,利用 哈希表 作为底层结构,重写了 set / map,就是 unordered_set / unordered_map 图片出自:C++新特性之三:标准库中的新增容器...:C++【set 和 map 学习及使用】 unordered_set 的使用 #include #include #include <unordered_set...4.3、性能对比 下面是性能测试代码,包含 大量重复、部分重复、完全有序 三组测试用例,分别从 插入、查找、删除 三个维度进行对比 注:测试性能用的是 Release 版,这里的基础数据量为 100 w...#include #include #include #include using namespace std;...,在数据 随机 的情况下,哈希各方面都比红黑强,在数据 有序 的情况下,红黑更胜一筹 单就 查找 这一个方面来说:哈希 一骑绝尘,远远的将红黑甩在了身后 ---- 总结 以上就是本次关于 C++【初识哈希

23220

C++C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 )

变量值 10 ; 修改 引用 b 的值 , 变量 a 的值也会被修改 ; 代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 //...C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件...C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件...直接将变量传入函数即可 , 在函数中获取引用的值时 , 不需要使用指针 , 直接使用引用访问传入的变量 ; 代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用...20, b = 10 5、代码示例 - 完整代码示例 完整代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中

60721

C++C++ 引用详解 ② ( 引用的意义 | 引用本质分析 | 引用常量特征 | 引用所占内存空间与指针相同 | 引用C++ 编译器实现 | 引用编译时会自动翻译为常量指针 )

引用 b 的地址 , 打印出来 , 打印出的 变量 a 和 引用 b 的地址是相同的 , 说明这两个都是内存空间的别名 ; 代码如下 : // 包含 C++ 头文件 #include "iostream...Student { int age; int& a; int& b; }; 使用 sizeof 函数 , 获取上述结构体的大小 ; 使用下面的代码验证 : // 包含 C++ 头文件 #include...---- 1、C++ 引用常量指针 综合上述引用的特征 : 引用具有常量的特征 , 是一个常量 ; 引用和变量都是相同的内存空间的别名 , 其地址都指向内存空间 ; 引用本身也占用内存空间 , 占用大小与指针相同...; 综合上面的三种特点 , C++ 语言编译器 中 , 引用的本质是 : 类型* const 指针名称; 指针 ; 引用C++ 语言内部是 常量指针 , 下面 C++ 语言的 " 引用 " 引用类型...& 引用名称 等同于 下面的 C 语言的 " 常量指针 " 指针类型* const 指针名称 C++ 语言中的 引用 , 其在 编译器中的实现 就是 " 常量指针 " , 因此 引用 占用的内存空间与

23820

C++C++ 引用详解 ⑩ ( 常量引用案例 )

C++ 语言中 , 常量引用引用类型 的一种 ; 借助 常量引用 , 可以将一个变量引用 作为实参 传递给一个函数形参 , 同时保证该值不会在函数内部被修改 ; 这样既保证了参数传递效率 ,...========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 正确代码示例 : // 包含 C++ 头文件 #include "iostream" //...使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件 #include // 常量引用作为函数参数...成员的值 , 就会在编译时报错 //student.age = 0; } 正确代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间...// 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件 #include // 定义一个结构体类型, 之后使用该类型的常量引用进行测试

17830

标准关联容器一定比vector的查找速度快吗?

www.cnblogs.com/33debug/p/6661774.html //https://blog.csdn.net/u012501459/article/details/48229399 /*** * 为什么要引用计数...实际上是一种用对象来管理资源的方式,因为普通的栈上的对象在离开作用域时会调用对应的析构函数 * 根据这个特性,可以实现用于对指针进行管理的类, 不要显式调用 delete ,就可以释放 new * * 2,引用计数可以使许多等值对象共享同一个值...::iterator的operator*返回一个常数 T&, 可以让set的迭代器的解引用的结果是set元素的常量引用 //在这样的实现下,讲没有办法修改set的元素,因为所有访问那些元素的方法都将在让你访问之前加一个...,然后 v赋值给所引用 (从 operator[]返回的) 的对象 2,当要更新一个已存在的的关联值时很直接,已经有 operator[] 可以用来返回引用的值对象 3,但是k不再map里,operator...// 假设是一次更新操作,即,m已经包含是1的元素。那样的话,上面的模板推断出ValueArgType是double,函数体直接把m1_与1相关的那个Widget。

1.8K10

10min快速回顾C++语法(八)STL专题

C++语法基础(八)STL ⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。...两个二分查找。 s.lower_bound(x)查找大于等于x的元素中最小的一个,并返回指向该元素的迭代器。 s.upper_bound(x)查找大于x的元素中最小的一个,并返回指向该元素的迭代器。...11.6.5 []操作符 h[key]返回key映射的value的引用,时间复杂度为 O(logn)。 []操作符是map最吸引人的地方。...#include using namespace std; int main() { unordered_set a;//哈希表,不能存储重复元素 unordered_multiset...#include using namespace std; int main() { unordered_map a;//哈希表,不能存储重复元素

25430

【编程基础】C++初学者需掌握的10个C++特性(中)

Strongly-typed enums 强类型枚举 传统的C++枚举类型存在一些缺陷:它们会将枚举常量暴露在外层作用域中(这可能导致名字冲突,如果同一个作用域中存在两个不同的枚举类型,但是具有相同的枚举常量就会冲突...enumclassOptions {None, One, All}; Options o = Options::All; Smart Pointers 智能指针 已经有成千上万的文章讨论这个问题了,所以我只想说:现在能使用的,带引用计数...· weak_ptr: 持有被shared_ptr所管理对象的引用,但是不会改变引用计数值。...error C2064: term does not evaluate to a function taking 1 arguments 问题出在auto意味着对象类型由初始表达式决定,然而初始表达式又包含了对其自身的引用...对C类型数组的重载已经包含在标准库中了。 我们还用上一个例子中的代码来说明,在这个例子中我打印了一个数组然后查找它的第一个偶数元素。如果std::vector被替换成C类型数组。

79440
领券