c++ stl
文章平均质量分 80
First Snowflakes
捡贝壳
展开
-
Get Time in Milliseconds in C++
First:Use the std::chrono::system_clock::now() Method to Get Time in Milliseconds in C++The std::chrono::system_clock class is the interface in C++ to get system-wide real-time wall clock.Most systems use Unix time, which is represented as seconds pa原创 2021-10-06 12:45:21 · 694 阅读 · 0 评论 -
C++ STL priority_queue
与普通的queue的不同是,程序员可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。优先队列具有队列的所有特性,并在这基础上添加了内部的一个排序,它本质是一个堆实现的,堆的插入和删除操作的时间复杂度都是log。A priority queue is a container adaptor that provides constant time lookup of the largest (by default) element, at the expense of logarithmic原创 2021-09-20 17:47:30 · 219 阅读 · 0 评论 -
C++11 中的 emplace
C++11中大部分的容器对于添加元素除了传统的 insert 或pusb_back/push_front 之外都提供一个新的函数叫做emplace。 比如,如果你想要向 std::vector 的末尾添加一个数据,你可以:std::vector<int> nums; nums.push_back(1);你也可以使用:std::vector<int> nums;nums.emplace_back(1);避免不必要的临时对象的产生emplace...原创 2021-01-04 21:01:44 · 483 阅读 · 0 评论 -
c++11 实现读写锁
Note: C++ 17里已经引进了读写锁 std::shared_mutex , 其lock()即以写方式加锁, 其lock_shared()即以读方式加锁。https://en.cppreference.com/w/cpp/thread/shared_mutex实现一个读写锁类, 可以有两种方式获取锁,读方式,写方式。 允许多个"读线程"同时进入临界区,但是同一时刻只允许一个"写线程"进入临界区。当有写线程进入临界区时,不允许任何其他读或写线程同时进入。 写线程优先。方法:在类中增加成...原创 2020-11-25 22:34:43 · 7164 阅读 · 3 评论 -
C++ STD标准模板库的泛型思想
在C++泛型程序设计领域中,最显著的贡献就是STL(StandardTemplateLibrary),它后来被采纳并引入到C++标准库中。STL实际上是一个框架,它提供了许多有用的操作,我们也把这些操作称为算法;它同时也为对象集合提供了数据结构,我们把这些数据结构称为容器;算法和容器都以模板实现。STL实现了算法和容器的分离:算法并不是容器的成员函数,而是以一种泛型的方式编写的;因此任何容器(和线性的元素集合)都可以使用这些算法。为了实现这个目的,STL的设计者引入了一个称为迭代器的抽象概...原创 2020-11-21 09:24:27 · 581 阅读 · 0 评论 -
C++ map
1. 使用std::map进行排序#pragma once#include <algorithm>#include <map>#include <string>#include <iostream>using namespace std;// 自己编写的Compare,实现按照字符串长度进行排序struct CmpByKeyLength { bool operator()(const string& k1, con...原创 2020-11-15 21:52:22 · 258 阅读 · 0 评论 -
C++ algorithm库常用函数
头文件:#include <algorithm>1) std::max, std::min;2) std::swapint a = 1;int b = 2;std::swap(a,b);#if _HAS_CXX17template <class _Ty, enable_if_t<is_move_constructible_v<_Ty> && is_move_assignable_v<_Ty>, int...原创 2020-11-15 21:36:41 · 688 阅读 · 0 评论 -
C++11条件变量--condition_variable
C++条件变量--std::condition_variable使用:1)原创 2020-09-28 23:20:06 · 331 阅读 · 0 评论 -
从 c++ STL之从vector的resize和reserve看vector的源码实现
基本用法reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了.再者,两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构...原创 2020-11-01 11:22:26 · 1364 阅读 · 0 评论 -
c++ 11 STL之is_same
基本概念以及用法https://en.cppreference.com/w/cpp/types/is_same头文件:#include <type_traits>std::is_same是一个类!eg.#pragma once#include <iostream>#include <type_traits>int main() { //bool bVar = std::is_same<int, float>::v...原创 2020-10-27 21:35:33 · 1015 阅读 · 0 评论 -
C++: 类型擦除(type erasure)
在 C++ 中,编译器在编译期进行的静态类型检查是比较严格的,但有时候我们却希望能“避过”这样的类型检查,以实现更灵活的功能,同时又尽量地保持类型安全。听起来很矛盾,而且貌似很难办到。但其实 C++ 的库里已经有很多这样的应用了。比如,著名的 boost::function 和 boost::any 。当我们定义一个 function<void(int)> fun 对象,则 fun 即可以存储函数指针,又可以存储函数对象,注意,这两者是不同“类型”的,而且函数对象可以是无限种类型的...原创 2020-10-23 08:48:39 · 1423 阅读 · 0 评论 -
仿函数functors与函数对象function objects
仿函数是早期的名称,c++标准规格定案后所采用的新名称是函数对象。仿函数是一个行为类似函数的对象。 为了能够 “行为类似函数”,其类别定义中必须自定义function call运算子(operator() )。拥有这样的运算子后,我们就可以在仿函数对象后面加上一对小括号,以此调用仿函数所定义的operator()。class A {public: int operator() (int a, int b) { return a + b; }};int m.原创 2020-09-27 23:24:35 · 423 阅读 · 0 评论 -
c++ STL之map的iterator对应的是什么
是键值对!?原创 2020-08-27 22:50:50 · 489 阅读 · 0 评论 -
c++ STL之transform函数
小写字母转成大写:std::string Name = "ftff";std::string ver = version;std::transform(Name.begin(), Name.end(), Name.begin(), ::toupper);std::transform(ver.begin(), ver.end(), ver.begin(), ::toupper);http://www.cplusplus.com/reference/algorithm/transform/...原创 2020-06-29 08:50:13 · 657 阅读 · 0 评论 -
内存模型 & C++11的memory order
C++ atomic操作数中有一个选项可以指定对应的memory_order。C++11中提供了六种不同memory_order选项,不同的选项会定义不同的memory consistency类型。什么是原子操作?原子操作就是对一个内存上变量(或者叫左值)的读取-变更-存储(load-add-store)作为一个整体一次完成。例如普通的非原子操作:x++这个表达式如果编译成汇编,对应的是3条指令:mov(从内存到寄存器),add,mov(从寄存器到内存)那么在多线程环境下...原创 2020-06-24 08:04:00 · 990 阅读 · 1 评论 -
C++ 11原子类型 -- atomic_flag
std::对象可以是两种状态之一:设置或清除,且须用ATOMIC_FLAG_INIT初始化,这会将该标志初始化为清除状态(此标志总是以清除状态初始化的),如下:std::atomic_flag flag=ATOMIC_FLAG_INIT;只支持两种原子操作:test_and_set函数:如果atomic_flag对象已经被设置,则返回true; 如果atomic_flag对象未被设置,则设置之,返回false。std::atomic_flag可用于多线程之间...原创 2020-06-24 07:24:11 · 784 阅读 · 0 评论 -
红黑树
侯捷老师STL源码分析:https://www.bilibili.com/video/BV1zt411V7Ye?p=20原创 2020-05-26 08:40:42 · 163 阅读 · 0 评论 -
C++ 标准库 ordered_map原理
侯捷老师:map的底层使用红黑树结构来实现,是有序的结构。插入元素时,insert函数比[]更快.内部红黑树的节点类型是pair,例如,定义map<int , string>,内部红黑树的节点类型是pair<int ,string>:unordered_map原理:https://blog.csdn.net/qq_35865125/article/details/106245810侯捷讲解video:https://www.bi...原创 2020-05-26 08:25:17 · 8502 阅读 · 0 评论 -
C++ unordered_map原理
C++11推出了4个新的关联式容器:unordered_map,unordered_set, unordered_multimap, unordered_multiset, 即加入了unordered系列的容器。这4个关联式容器与map,multimap,set,multiset功能基本类似,最主要就是底层结构不同,使用场景不容。如果需要得到一个有序序列,使用红黑树系列的关联式容器,如果需要更高的查询效率,使用以哈希表为底层的关联式容器。unordered_map是c++11...原创 2020-05-20 22:45:57 · 5996 阅读 · 3 评论 -
C++ STL之wstring
http://www.cplusplus.com/reference/string/wstring/原创 2020-05-17 11:19:29 · 532 阅读 · 0 评论 -
C++STL之tuple类型_tie函数_get函数
tuple:元组1. std::tuplehttps://zh.cppreference.com/w/cpp/utility/tuple (C++11 起)类模板 std::tuple 是固定大小的异类值汇集。它是 std::pair 的推广。example:std::tuple<int, int> foo_tuple() { return...原创 2020-03-08 22:21:22 · 3229 阅读 · 0 评论 -
shared_ptr线程安全问题
May <C++ Concurrency in Action 2nd Edition> will give an ansower!Ref:https://blog.csdn.net/jiangfuqiang/article/details/8292906https://www.cnblogs.com/gqtcgq/p/7492772.html原创 2020-03-01 00:10:31 · 1477 阅读 · 0 评论 -
c++ 11 new feature: Collection
http://mindhacks.cn/2012/08/27/modern-cpp-practices/https://herbsutter.com/elements-of-modern-c-style/原创 2019-11-16 16:16:14 · 227 阅读 · 0 评论 -
c++ static map成员变量初始化为空
https://stackoverflow.com/questions/11247407/initialize-a-static-private-map-as-empty原创 2019-11-03 21:58:31 · 4082 阅读 · 0 评论 -
sizeof (vector), sizeof(含有vector成员的类名)
需要查阅stl资料!https://blog.csdn.net/albertsh/article/details/49913945https://blog.csdn.net/baidu_35679960/article/details/85071626https://stackoverflow.com/questions/2373189/sizeof-a-vectorhttp...原创 2019-09-25 20:18:06 · 598 阅读 · 0 评论 -
c++ map --- 使用square bracket时遇到的与const冲突的问题
#pragma once#include <iostream>#include <map>#include <vector>#include <string>using namespace std;class TestCPlus{public: TestCPlus() :b(2),c(3), a(1){}; ~T...原创 2019-09-19 18:04:44 · 571 阅读 · 0 评论 -
c++ stl vector使用
1using namespace std; const std::vector<std::string> vNames = {"cat","dog","cow"};const std::vector<std::string> vfood = {"grass", "banana" };for (std::vector<std::string>::co...原创 2019-09-25 20:18:25 · 150 阅读 · 0 评论