STL
黑塞123
这个作者很懒,什么都没留下…
展开
-
vector clear和 swap的区别
clear 和 swap 的区别原创 2022-05-29 15:38:11 · 655 阅读 · 0 评论 -
std 迭代器增加,减少 指定偏移量
增加1: next(_InputIterator __x, typename iterator_traits<_InputIterator>::difference_type __n = 1)2: advance(_InputIterator& __i, _Distance __n)减少prev(_BidirectionalIterator __x, typename iterator_traits<_BidirectionalIterator>::differen原创 2021-10-26 13:29:24 · 422 阅读 · 0 评论 -
uninitialized_copy 和 copy_backward
解释:uninitialized_copy:从前往后复制copy_backward:从后往前复制案例······原创 2021-10-17 23:33:48 · 456 阅读 · 0 评论 -
c++ string字符串拆分
最简单(只拆分空格) std::string text ("Let :me :split: this: into words"); std::istringstream iss(text.data()); std::istream_iterator<std::string>{iss}; std::vector<std::string> results(std::istream_iterator<std::string>{iss},原创 2021-10-11 17:38:35 · 1479 阅读 · 0 评论 -
笔记 关于std::function 和 函数对象
1: 函数对象如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。通俗一点就是 运算符重载, 只不过 重载的 运算符是() 。和别的 运算符号 重载 调用 一样。 支持重载 和缺省使用 方法: test t;...原创 2019-05-06 09:35:58 · 116 阅读 · 0 评论 -
hashmap 原理讲解
如果有写的不对的地方 请指出来, 博主也是初次了解hashmap具体先看图:实现细节1: hashmap 会分配一大片内存(vector)也就是桶,但他并不会保存数据只是一个编号,这个编号怎末来的, 是通过他的hash_fun 哈希函数得来的。 简称 hashcode 然后通过对桶进行运算(这块并不是唯一, 根据经验进行运算得到一个值就编号了)2:每个 编号底下对应的是各自的链表,也就是说编号指向的是list 的node 节点。真正的数据pair 存储在 list 里面假设: 如图上图所.原创 2021-08-15 20:10:12 · 211 阅读 · 0 评论 -
条款14:使用reserve来避免不必要的重新分配
之前说过reserve 和 resize 的区别 具体可了解下前言:关于STL容器,最神奇的事情之一是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)对于vector和string,只要需要更多空间,就以realloc等价的思想来增长。这个类似于realloc的操作有四个部分:1. 分配新的内存块,它有容器目前容量的几倍。在大部分实现中,vector和string的容量每次以2为因数增长。也就是说,当容器必须扩展时,它原创 2021-07-26 16:54:50 · 186 阅读 · 0 评论 -
条款9: STL 删除元素初步介绍(Effective STL )
序列容器1:连续内存vectorvector<int>vec{1,2,3,4,5,3,5,5,4,5,6,6,6,5,6,5};vec.erase(remove(vec.begin(),vec.end(),5),vec.end());2:不连续内存listlist的成员函数remove erase(remove) 更高校list<int>li{1,2,3,4,5,3,5,5,4,5,6,6,6,5,6,5};li.remove(5)关联容器mapm原创 2021-07-18 14:28:22 · 137 阅读 · 0 评论 -
vector resize 和 reserve 的区别
前言:一般在容器声明的时候, 有人会给vector 设置一大小, 会用 resize 和reserve 这两种都可以, 但具体的区别,和差异是什么? reserve: std::vector<int>vec; vec.reserve(10); std::cout<<vec.size()<<std::endl; std::cout<<vec.capacity()<<std::原创 2021-07-12 09:18:59 · 328 阅读 · 0 评论 -
提升vector 性能
Vector 就像是 C++ STL 容器的瑞士军刀。Bjarne Stoutsoup 有一句话– “一般情况下,如果你需要容器,就用 vector”。像我们这样的普通人把这句话当作真理,只需要照样去做。然而,就像其它工具一样,vector 也只是个工具,它能提高效率,也能降低效率。这篇文章中我们可以看到 6 种优化使用 vector 的方法。我们会在最常见的使用 vector 的开发任务中看到有效的方法和无效的方法,并以此衡量有效使用 vector 会带来怎样的性能提升,并试图理解为什么能得到这样的.转载 2021-06-13 13:39:35 · 853 阅读 · 0 评论 -
c++ map简单实用
这里只讲解简单实用, 至于底层采用红黑树,原理后面讲解1:map 为什么键是惟一的?红黑树底层插入元素有两种, map 用的是insert_unique函数。1>insert_unique()2> insert_equal()2:插入元素:insert()empalce()//类似于vector 中的push_back emplace_backinsert_or_assign() // c++17 key已经存在,则会覆盖之前的 valuedata.insert(make_p原创 2021-04-04 17:16:27 · 265 阅读 · 0 评论 -
map正确删除元素
map 遍历删除一个元素的时候:正确方法std::map<int, std::string> c = { {1, "one"}, {2, "two"}, {3, "three"}, {4, "four"}, {5, "five"}, {6, "six"} }; for (auto it = c.begin(); it != c.end(); ){ if (it->first % 2 == 1) { it = c.erase(it);// 返回的是下一个元素原创 2020-11-30 21:54:42 · 692 阅读 · 0 评论 -
c++ 仿函数的使用
介绍看上去像一个函数, 其实是一个类。 在通俗一点就是, 操作符重载函数 operator()()第一种 重载() operator()lambda 表达式用途:在c++ STL算法中 经常会用到。比如 count_if, find_if如下代码#include <iostream>#include<vector>#include<algorithm>using namespace std;// 自定义 count_iftemplate原创 2020-09-21 14:58:38 · 801 阅读 · 0 评论 -
c++ find的简单使用 以及 仿函数
#include <iostream>#include<algorithm>#include<iterator>#include<vector>using namespace std;class yang{public: yang(int _age):age(_age){} bool operator==(const yang&n) { return age == n.age; }原创 2020-05-10 18:14:31 · 490 阅读 · 0 评论