
STL
文章平均质量分 82
宇龍_
有些白嫖党连个赞都不点甚至直接抄走了说原创,新发布的都写到专栏里吧,哎。
私聊给群号,可进Q群咨询问题。
展开
-
vector合并
vector的合并有三种方法:1、当然就是自己写循环来遍历合并了,但是运行效率极低,不推荐这样做2、用merge函数,在头文件<algorithm>中,使用该函数需要注意的: a、合并的目标容器必须要有足够的空间,也就是size的大小必须要够 b、源容器必须要有序代码如下:#include <iostream>#include <...原创 2019-05-11 10:25:45 · 19584 阅读 · 0 评论 -
C++中placement new操作符(经典)
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; }首先我们区分下几个容易混淆的关键词:new、......原创 2019-04-29 22:59:49 · 1407 阅读 · 0 评论 -
减少使用make_pair
在写代码的时候,我们经常在使用map的时候同样使用着make_pair,例如以下的代码std::map<int,Obj> m;int i = 0;Obj1 obj1;m.insert(make_pair(i,obj1));为什么说make_pair效率很低呢,因为make_pair的返回值是pair对象,会造成什么结果呢?obj1拷贝到临时的pair对象中,临时的p...原创 2019-04-23 21:20:44 · 730 阅读 · 0 评论 -
vector,map以及list性能对比
虽然说map是关联容器,一般关联的数据都使用map来存储,但是实际上vector或者list也是可以代替这样的功能。具体实现可以看https://blog.youkuaiyun.com/Think88666/article/details/89430259比如vector保存一个结构体:struct stData{ int key; int value;}又或者用ve...原创 2019-04-21 11:59:17 · 20200 阅读 · 2 评论 -
vector或list保存结构体或对象时的查找方法
vector或者list内部保存结构体或者对象时,可以实现和map一样的效果,但是千万不要手动遍历容器,这样会导致程序的性能下降数倍,最好的方法是使用std::find或者std::find_if来查找,速度快的多!代码如下:1、std::find例子#include <iostream>#include <vector>using namespace ...原创 2019-04-21 11:57:39 · 2765 阅读 · 0 评论 -
vector中存放对象和指针的区别
这里先说出结论:vector中push_back对象时,会调用对象的拷贝构造函数。而且在vector空间不足时,继续push_back,vector会将之前的所有对象都拷贝构造到一块更大的空间里。也就是说对象如果较大,那么最好用vector保存指针以减少调用拷贝构造 造成的消耗,如果vector存指针,那么也就拷贝指针而已,消耗非常小。如果实在需要使用vector保存对象,那么尽量利用c++1...原创 2019-04-20 10:38:12 · 21270 阅读 · 5 评论 -
怎样为std::map的自定义键值
1、重载<运算符——也就是重载key类的小于运算符#include <map>#include <iostream>using namespace std;struct stSubKey //自定义key{ int m_nKey1; int m_nKey2; stSubKey(int nKey1, int nKey2) :m_nKey1(...原创 2019-04-14 16:13:17 · 10214 阅读 · 0 评论 -
enable_shared_from_this,shared_from_this
enable_shared_from_this是标准库中的模板类,定义于头文件<memory>那么这个模板类有什么用呢?试想这样一种情况,当类需要使用智能指针来管理的时候,若是在类的外部使用了智能指针来管理,但是在类的内部又需要传递当前类的对象又怎么办?具体看代码就很清楚了:我们来看两种错误的处理方式:1、传递this指针:#include <iostream...原创 2019-03-16 23:04:40 · 334 阅读 · 0 评论 -
bind类成员函数
#include <vector>#include <string>#include <iostream>#include <functional>using namespace std;class Test{public: Test():myValue(0){ } void printInt(int...原创 2019-03-15 16:54:33 · 1855 阅读 · 0 评论 -
find和find_if
本文章简单讲解了find和find_if的使用方法#include <vector>#include <iostream>#include <algorithm>#include <functional>using namespace std;bool findParam(int a,int b){ return a==b...原创 2019-03-12 09:53:51 · 340 阅读 · 0 评论 -
bind,bind1st,bind2nd的使用
在c++中经常用到bind等相关函数,这里仅举例说明一下相关函数的使用方法。先看一段简单的代码:#include <iostream>#include <algorithm>#include <functional>using namespace std;void printInt(int a,int b,int c){ cout...原创 2019-03-11 22:59:33 · 702 阅读 · 3 评论 -
迭代器失效——vector,map
一、vector的迭代器失效的情况,代码如下:#include <vector>#include <iostream>using namespace std;int main(){ vector<int> v; for(int i=0;i<10;i++) v.emplace_back(i); a...原创 2019-03-10 22:09:49 · 374 阅读 · 0 评论 -
emplace_back与push_back的区别
下面举了几种比较常见的情况:(以下所有代码均假设存在一个Teacher类)1、#include <vector>int main(){ std::vector<Teacher> v; Teacher t1; v.push_back(t1); return 0;}执行v.push_back(Teacher());这段代...原创 2019-02-21 22:26:41 · 9969 阅读 · 1 评论 -
c++多线程交替打印、条件变量、锁
主要知识——多线程,条件变量,锁。 这里其实有一个难点,当然可以在看了代码之后再回头来看,就是对std::condition_variable::wait方法的理解。这里解释一下,当执行wait方法时,锁是会被解开的以便别的线程使用资源,但是调用wait的线程会被阻塞直到别的线程调用notify等一系列方法,然后调用wait的线程会再次获取锁,用代码来表示就是://cv是条件变量...原创 2019-02-19 22:57:35 · 1004 阅读 · 0 评论 -
优先级队列
在实现任务队列的时候,由于任务是区分优先级的,故容器选用了优先级队列。在此就总结一下优先级队列的使用方法。与普通队列的先进先出相比,优先级队列多了优先级的概念(废话)。具体就举例说明吧:1、优先级队列的操作:2、简单使用#include <queue>#include <iostream>int main(){ std::priorit...原创 2019-02-17 17:02:19 · 316 阅读 · 0 评论 -
c++函数对象、仿函数
重载调用操作符()的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。又称仿函数。简单举例#include <iostream>class Cmp{public: bool operator ()(int x,int y){ return x>y; }};int main(){ C...原创 2019-02-17 14:04:56 · 555 阅读 · 0 评论 -
STL四种智能指针
STL一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr,auto_ptr是C++98提供的解决方案,C+11已将其摒弃,并提出了unique_ptr作为auto_ptr替代方案。虽然auto_ptr已被摒弃,但在实际项目中仍可使用,但建议使用较新的unique_ptr,因为unique_ptr比auto_ptr更加安全,后文会详细叙述。s...转载 2019-02-14 21:31:13 · 792 阅读 · 0 评论 -
std::ref
首先,&是类型说明符,而std::ref是一个函数,返回std::reference_wrapper(类似于指针)。 为什么需要std::ref?(std::cref类似)主要是考虑到c++11中的函数式编程,例如:std::bind。 示例:#include <iostream>#include <functional> void ...转载 2019-01-22 22:52:34 · 332 阅读 · 0 评论 -
c++ 实现基于stl的信号量
在stl中并没有提供信号量,但是可以很容易的通过stl的中互斥量和条件变量来模拟实现信号量。类Semaphore中的acquire方法是获取信号,当总数不足时,则阻塞等待,直到信号被释放。release方法则是释放信号。具体的代码如下:#include <iostream>#include <mutex>#include <condition_v...原创 2019-01-22 22:29:09 · 10980 阅读 · 0 评论 -
C++中cout和cerr的区别?
之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以下的内容均是本人从网上查阅资料看来整理的,暂时还没有查阅官方资料,不保证准确,欢迎讨论)其实大家平常常会用的主要有三个:cout、cerr、clog,首先简单介绍下三者。这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论):cout:写到标准输出的ostream对象;cerr:输出到......原创 2019-01-22 13:50:03 · 797 阅读 · 0 评论 -
STL线程库简介
STL线程库的前身是boost::thread,在C++ 11标准化后便正式归纳入了stl库,通过它我们可以很容易实现跨平台的线程管理。 线程管理 在std::thread库中,一个线程用的是一个thread对象表示,当创建一个thread对象时即创建一个线程,一个简单的示例如下: #include <iostream> #include <...转载 2019-01-21 22:55:45 · 648 阅读 · 0 评论 -
C++ 并发编程,std::unique_lock与std::lock_guard区别示例
背景平时看代码时,也会使用到std::lock_guard,但是std::unique_lock用的比较少。在看并发编程,这里总结一下。方便后续使用。std::unique_lock也可以提供自动加锁、解锁功能,比std::lock_guard更加灵活。std::lock_guardstd::lock_guard是RAII模板类的简单实现,功能简单。1.std::lock_g......原创 2019-01-21 22:52:01 · 268 阅读 · 0 评论 -
unlock of unowned mutex(stl::mutex)
今天在使用stl的mutex过程中出现了异常,初步研究是由于mutex的加锁和解锁在分别在不同线程中执行所导致。所以,对于mutex而言,加锁和解锁都要在同一线程中,而不应该是一个线程加锁,另一个去解锁。官方文档的解释:对于lock: Blocks the calling thread until the thread obtains ownership of t...原创 2019-01-21 22:30:35 · 11989 阅读 · 1 评论 -
简要总结四个智能指针
在c++标准库里主要有四个智能指针:C++四种智能指针auto_ptr、unique_ptr、shared_ptr和weak_ptr。其中auto_ptr是C++98标准化引入的;scope_ptr、shared_ptr和weak_ptr是C++11标准化才引入的(当然,早在C++03的TR1中就已经可以使用了)。我们都知道,auto_ptr虽说简单,但使用起来却到处是坑,以至于大家都不......原创 2019-01-15 22:05:31 · 1501 阅读 · 0 评论 -
C++智能指针 weak_ptr
C++智能指针 weak_ptr weak_ptr 是一种不控制对象生命周期的智能指针(注意), 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr.而weak_ptr只是提供了对管理对象的一个访问手段. weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以......原创 2019-01-14 22:14:27 · 323 阅读 · 0 评论 -
c++ shared_ptr使用的几点注意
先介绍一下shared_ptr.是c++为了提高指针安全性而添加的智能指针,方便了内存管理。功能非常强大,非常强大,非常强大(不单单是shared_ptr,配合week_ptr以及enable_share_from_this()以及share_from_this())!!!对于支持智能指针的c++版本编程,能用智能指针就用智能指针!智能指针的头文件是<memory>,具体用法请参考......原创 2019-01-14 22:02:07 · 1509 阅读 · 0 评论 -
C++中遍历multimap
在multimap中,同一个键关联的元素必然相邻存放。基于这个事实,就可以将某个键对应的值一一输出。1、使用find和count函数。count函数求出某个键出现的次数,find函数返回一个迭代器,指向第一个拥有正在查找的键的实例。2、使用lower_bound(key)和upper_bound(key) lower_bound(key)返回一个迭代器,指向键不小于k的第一个...转载 2018-12-18 21:01:15 · 4146 阅读 · 0 评论