stl
zidian666
这个作者很懒,什么都没留下…
展开
-
自定义<set><map>的hash函数时遇到的问题
Hash和Equal为对象时, 其operator()后应加上const。原创 2022-10-21 12:01:50 · 100 阅读 · 0 评论 -
测试std::unordered_map的hash冲突
std::unordered_map的实现为hash表,所以hash值范围越小,越容易出现冲突,效率越低。m 查找 0.004000 0.018000 0.146000。m2 查找 0.004000 0.004000 0.004000。m用的是自定义的hash函数hash值只有0和1,m2用默认hash函数。n为数据量,times为测试次数,下面结果取最后一次测试结果。n为100,1000,10000时。原创 2022-10-09 17:14:04 · 396 阅读 · 0 评论 -
error:type/value mismatch at ... ::iterator
修改方式:在 std::list前加类型声明typename。加上typename,让编译器知道你是在声明一个类型而不是访问静态成员。原因:有没有觉得class::xxx的写法像是在访问类里的静态成员。iterator是stl类的嵌套类。错误在编译以下代码时出现。...原创 2022-08-18 15:03:07 · 175 阅读 · 0 评论 -
将vector<string>写入文件,但文件大小与期望不一致
打算用 vector 装 1024 * 1024 * 64 个长度为 16 的 string,共计1GB大小,随机生成内容,写成文件,作为压缩测试的文件。但是用以下语句,写出来的文件大小每次都不一样。ofstream.write((char *)vector.data(), 16 * vector.size());想了很久才悟到,vector 上的对象是在内存上是连续的,但指的是 string 对象。string 的内容未必在(应该完全不在)vector 上。vector 上的连续空原创 2022-03-03 10:33:07 · 287 阅读 · 0 评论 -
queue线程安全
queue非线程安全大佬封装成线程安全的,接口与原<queue>一致,但无法拷贝(锁)#pragma once#include <queue>#include <mutex>#include <condition_variable>template <typename T>class SharedQueue{public: SharedQueue(); ~SharedQueue(); T &am原创 2022-02-08 17:32:09 · 1583 阅读 · 0 评论 -
C++STL之vecot、list、deque的排序插入访问效率
低数据量的参考价值不高,其余数据仅供参考,测试代码在末尾排序第一次测试 第二次测试 STL类型 数据量 时间 STL类型 数据量 时间 vector [10] 0.002000 ms vector [10] 0.001200 ms deque [10] 0.001000 ms deque [10] 0.001200 ms list [10] 0.006100 m...原创 2022-01-20 15:31:39 · 649 阅读 · 0 评论 -
C++STL之memory
allocator,分配内存但不进行任何初始化,很少用shared_ptr 共享指针,初始化后同指针一样指向一个对象,成员函数use_count() 表示有多少共享指针指向对象,每当shared_ptr被赋值、拷贝的时候,use_count()加1,一个共享指针不再指向对象时,use_count减1。以这种方式构造的,指向同一个对象的指针,use_count是共享的。不要使用同一个对象初始化多个共享指针。一个对象只能初始化一个共享指针。其成员函数get()可返回对象类型的指针,也不要用这个指针初始化原创 2022-01-19 14:17:40 · 395 阅读 · 0 评论 -
C++ STL之 algorithm
Algorithms library (Algorithm) - C++ 中文开发手册 - 开发者手册 - 云+社区 - 腾讯云函数意如其名,一般会有带谓语参数的重载版本,可以手写操作规则。原创 2022-01-19 10:57:34 · 184 阅读 · 0 评论 -
C++ STL 之set
不要使用过期的iteratorset,集合其中所有元素都是唯一的,set中的元素是有序的。定义set时 set<int, less<int>>表示升序,set<int, greater<int>>可声明降序。set的数据结构为红黑树,不打算讲,因为笔者也不是很明白。插入和查找的时间复杂度为log2,相当于数据量翻倍,时间+1。equal_range(n),返回一个pair,<第一个可插入n的位置,最后一个可插入n的位置>e原创 2022-01-18 17:14:39 · 361 阅读 · 0 评论 -
C++STL之list
list,链表基本实现方式为一个struct包含数据和指针,每个指针指向下一个节点。STL中的list为双向链表,即struct中包含一个数据和两个指针,分别指向前一个节点和后一个节点。很显然,这样的结构会使list的插入删除操作非常灵活,插入和删除都只会影响最近的两个节点,而且访问头部和尾部都很方便。缺点是不能随机访问,不能像vector的at()和 [ ] ,每个数据都需要依次访问。其迭代器未重载+,-,+=,-=,只重载了++和--,即迭代器只能自增1和自减1.remove(n原创 2022-01-18 16:22:20 · 536 阅读 · 0 评论 -
C++ STL之Deque
<deque>的关键在于其内部的实现,存储管理机制。deque的内存时分段连续的,连续是假象。虽然可以像访问vector和数组一样用 [ ] 访问每一个元素,但花费的代价比较大。(假设deque中的元素为int),deque用一个vector保存一组int**,每个int**指向一个int*,int*就是数组的起始地址。所以deque的实质就是,vector中的每个元素指向一个数组,数组中元素就是deque的元素。deque能像vector一样访问元素,功劳在itearator身原创 2022-01-18 14:40:05 · 223 阅读 · 0 评论 -
C++ STL之 vector
vector实现原理是数组,其元素在内存上是连续的。学会vector的关键在于区别size()和capacity()。其成员函数vector.size()表示vector中实际元素的数量。vector的长度是不确定的,当往vector添加元素时,如果vector后的连续空间不足以插入元素,vector会重新申请一段更长的空间。vector.capacity()表示在不需要重新分配内存的情况下,vector能容纳的最多元素个数。若需重新分配空间,新的vector.capacity()会变为原创 2022-01-17 15:18:46 · 224 阅读 · 0 评论