探索STL标准模版库
文章平均质量分 89
Che3rry
这个作者很懒,什么都没留下…
展开
-
C++语法|emplace_back vs.push_back|他们的效率真的有区别吗?|最后讨论一个突发问题
STL版本如下:Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.我们首先分析该函数:用于在 vector 容器的末尾构造一个新的元素。该函数利用完美转发(perfect forwarding),将参数直接传递给元素的构造函数,从而在容器的存储空间中直接构造对象。具体细节感兴趣可以自行查看对于emplace_back我们只分析其核心代码:关于这段代码,我在【对象优化(三)|move移动语义和for原创 2024-05-18 18:17:13 · 742 阅读 · 0 评论 -
C++语法|⭐️对象优化(三)|move移动语义和forward类型完美转发
尽管所以我们上面的右值版本的push_back(T &&val),函数体中val还是一个左值,所以我们这段_allocator.construct(_last, val);std::forward可以根据我们参数val本身的定义,推导出我们的val到底是一个左值还是右值。但是我们这里仍然有很多问题,我们尽管提供了相应方法的右值版本,但是由于语法规则,右值引用变量其实是一个左值,所以在函数体内仍然无法分辨出该变量是一个右值引用,我们不得不添加std::move移动语义来把变量转换为一个右值。原创 2024-05-18 16:54:04 · 623 阅读 · 0 评论 -
C++ STL标准库解析|vector向量对象的迭代器实现vector::iterator
并且我们已经实现了string对象的迭代器,那么今天必然是填vector得坑啦!回顾完前面的文章,现在开整!原创 2024-05-17 20:37:27 · 426 阅读 · 0 评论 -
C++ STL标准库解析|简单实现STL容器string代码
我们还需要重点关注operator+,其实该函数功能上确实是没有问题的,而且也没有内存泄漏的问题。return tmp;但是该函数的效率比较低,主要是因为首先,ptmp指向了我们new出来的一块大内存,然后我们分别进行字符串拷贝和字符串连接;随后传入到tmp构造函数中。然后这个tmp又会根据我们外面传进来的指针再进行一次new,然后再次进行拷贝strcpy;if (p!} else {最后我们又delete掉ptmp。原创 2024-05-17 12:11:25 · 838 阅读 · 0 评论 -
C++ STL标准库解析|实现string类的迭代器string::iterator
的迭代器标识这样我们也可以遍历到底层的最后一个元素。循环过程中做了++it,说明我们当前迭代器要跳到下一个迭代器来完成遍历,至于它底层到底是数组、链表还是哈希表无论是什么我们都不用管,我们作为使用者只需要对迭代器进行++即可。底层数据结构如何到下一个元素的具体操作都封装在了我们迭代器的++操作中,用户作为使用者是无感的(这就是所谓的透明地访问容器内部元素的值)。最后打印使用迭代器进行解引用。原创 2024-05-17 15:49:29 · 979 阅读 · 0 评论 -
C++ STL标准库解析|⭐️vector容器的空间配置器allocator
之前在文末,我们三大灵魂拷问,空间配置器是什么?为什么要空间配置器?没有会发生什么呢?本篇文章我们就从这三个问题入手,然后实现空间配置器。原创 2024-05-16 22:07:59 · 1061 阅读 · 0 评论 -
C++ STL标准库解析|简单实现STL容器vector代码和容器空间配置器
/指向数组起始的位置T *_last;//指向数组中有效元素的后继位置T *_end;//指向数组空间的后继位置。原创 2024-05-16 19:26:12 · 744 阅读 · 0 评论