C++ 11
C++程序员Carea
十年一线开发经验,热爱 C++ ,热爱编程
展开
-
std::thread 与类对象结合
代码】stdthread与类对象结合。原创 2022-07-21 15:17:49 · 355 阅读 · 0 评论 -
C++使用多线程验证多核比单核快
代码是用两个线程同时计算素数,再用单线程算一遍。如果多个核都在运算,那么两个线程的版本应该在两个核上同时计算,这样会更早出结果。验证代码如下:#include <vector>#include <algorithm>#include <thread>#include <iostream>using namespace std;#include <chrono>using namespace std::chrono;l原创 2022-01-05 13:25:21 · 860 阅读 · 0 评论 -
C++11 多线程文章列表
我的C++ 文章列表thread官方 创建可执行线程对象,调用join执行joinable() 判断该线程是不是可执行线程join() 当线程执行完毕时该函数退出:一直等待线程执行完毕。对于可执行thread对象,必须要调用join()函数。join和detach的区别 一般情况都使用join来准确的知道线程已经执行完毕并可以析构。std::async 非常棒的一篇...原创 2019-09-22 23:10:20 · 287 阅读 · 0 评论 -
C++随机数生成器mt19937生成随机数的用法
下面的代码来自官方示例:// mersenne_twister_engine constructor#include <iostream>#include <chrono>#include <random>#include <string>using namespace std;int main(){ // obtain a se...原创 2017-05-23 19:30:24 · 14468 阅读 · 0 评论 -
C++11 std::bind std::ref
std::bind 总是拷贝其参数,但是,调用者可以使用std::ref来实现传递引用给std::bind,翻译自《Effective Modern C++:改善C++11和C++14的42个具体做法》原文如下:std::bind always copies its arguments, but callers can achieve the effect of having an argum...原创 2018-04-10 22:19:22 · 1959 阅读 · 0 评论 -
C++异常的标准用法
C++标准本身提供的异常类完全能够满足任何规模程序的使用。为何要用异常下面首先引用《C++ 程序设计语言》中的段落来描述C++异常的目标(虽然该书描述为何需要异常时已经非常全面,这里只简单列举最为重要的思想):1 当程序是由相互分离的模块组成时,库的作者可以检查出运行时错误,但是一般却不知道怎样去处理他们(抛出异常);用户的代码知道如何处理他们(捕获异常),却又无法检查它们(因为异常发生...原创 2018-10-24 11:01:19 · 2193 阅读 · 0 评论 -
C++11复制控制
复制控制的内容复制(拷贝)控制:拷贝构造、拷贝赋值、移动 构造、移动赋值、析构一般来说,用户需要定义的场景是:1 析构函数 => 拷贝 + 赋值需要析构的类也基本上需要拷贝和赋值2 拷贝<=>赋值需要拷贝的类也需要赋值3 default我们要求编译器生成合成版本,这通常是值类型的类4 delete阻止拷贝被删除的函数是 指我们声明了这个...原创 2019-03-11 09:00:00 · 294 阅读 · 0 评论 -
C++ 原始指针、shared_ptr、unique_ptr分别在什么场景下使用
开发中一直萦绕我的一个困惑是:智能指针和原始指针什么场景怎么用?现在终于有了答案:1 两种指针的天赋:智能指针天生负责对象生命期管理;所以生命期对象全都由unique_ptr和shared_ptr来管理。2 两种指针的天赋:原始指针天生不负责对象生命周期管理;所以使用动态对象均通过原始指针来使用(参考各种第三方库QT/BCG/OS API等等)。...原创 2019-04-03 14:26:53 · 7077 阅读 · 7 评论 -
C++11日期获取与输出
代码如下:#include <ctime>#include <iomanip>#include <chrono> using std::chrono::system_clock; std::time_t tt = system_clock::to_time_t(system_clock::now()); struct std::tm v...原创 2019-05-12 21:06:31 · 2842 阅读 · 0 评论 -
C++ λ表达式lambda expression
看一个求余函数的例子:auto mod = [](int i,int j){return i%j;};一、lambda表达式[capture list] (parameter list) -> return type { function body}1 capture list是一个lambda所在函数中定义的局部变量的列表,通常为空;2 return typ...原创 2019-05-13 10:27:46 · 1896 阅读 · 0 评论 -
C++11 chrono计时
我的C++ 文章列表下面的代码开了好几个线程,等所有线程都运行完毕,统计用了多少时间其中,每个thread对象都应该调用join,以保证每一个线程在多线程环境下都可以完整的运行,而不被CPU调度而回不来错过了剩下没执行部分的执行。#include <iostream> // std::cout#include <thread> /...............转载 2019-09-11 11:17:17 · 3325 阅读 · 0 评论 -
weak_ptr基本用法
weak_ptr主要是配合share_ptr来实现应用计数,同时不会发生循环引用。参考:http://www.cnblogs.com/TianFang/archive/2008/09/20/1294590.html#include "boost/smart_ptr.hpp"#include "boost/weak_ptr.hpp"#includeusing namespace st原创 2016-03-13 14:41:37 · 3199 阅读 · 0 评论 -
std::unique_ptr
https://cplusplus.com/reference/memory/unique_ptr/operator[]/原创 2016-05-04 16:56:22 · 826 阅读 · 0 评论 -
设计模式(四)std::function助力抽象工厂和工厂方法
抽象工厂Abstract Factory意图:用工厂类的不同成员函数来返回不同类型的对象。这些不同的对象往往是有着共同的基类,最终是想利用多态。而多态已经被function+bind取代,所以这个模式没啥意义!特点:使用智能指针获取对象,而不是暴露原始指针。代码:#include "boost/smart_ptr.hpp"#include "boost/wea...原创 2016-03-16 11:44:57 · 4299 阅读 · 0 评论 -
C++复制控制(包括移动语义) 更新于2020-02-15
C++移动语义移动语义顾名思义是内存数据的移动,实际就是内存数据所有权的转移。目的:1 函数可以直接返回值类型的对象而不发生对象拷贝2 除了函数返回值,自定义类型的普通赋值也可以走移动语义,目的相同:减少内存开辟和释放(RapidJson库就是这种情况)例如:vector<int> fun(void);由于vector的移动构造函数会将fun内部返回的vect...原创 2016-08-23 18:38:22 · 1481 阅读 · 0 评论 -
C++内存管理利器shared_ptr V2.0
此只能指针已经被纳入C++11,只因它实在是我们太需要它了!如下的这些方面是我们需要它的理由(1)引用计数让你摆脱delete的使用,只要有一个指针对象没有被析构,管理的对象就不会被析构,所以你可以按值传递给函数,按值从函数返回(2)提供了变参工厂函数:make_shared<T>(...),让你摆脱new的出现(3)获取原始指针的成员函数:get(),可以让你在需要原...原创 2014-03-02 20:41:42 · 1779 阅读 · 0 评论 -
6.5 项目2 文本文件单词搜索程序
看完了这一节,就有想自己实现一下的感觉。主要是体验一下作者对交互类的设计思路,以及shared_ptr运用的正统方法和小的细节。按照书上的实现代码如下:#include #include #include #include #include #include #include #include #include using namespace std;typede原创 2016-12-08 14:08:51 · 1979 阅读 · 0 评论 -
C++11 函数调用操作符重载 function 加减乘除四则运算计算器
function+bind可以实现按值传递函数对象,从而消灭多态,消灭回调。参考:《C++ Primer 第五版中文版》《Linux 多线程服务端编程》代码:#include #include #include #include using namespace std;int add(int i,int j) { return i+j;}class divide{p原创 2016-03-31 17:56:08 · 2489 阅读 · 2 评论 -
C++11的字符串与数值间的类型转换:to_string() stoi stol stoul stoll stof stod stold
知道了C++的I/O设施之后,这些就变的很简单了。如果你经常使用,时间长了就会有感觉。这个事情是多此一举吗?就当是练习吧,知道原理之后,你会觉得用起来更舒畅,更喜欢C++了。#include #include #include #include #include #include using namespace std;templateResult lexical_cast(原创 2014-11-17 09:08:47 · 9739 阅读 · 0 评论 -
Zobrist Hash算法的基础:按位异或运算的性质
用途Zobrist Hash算法是各类棋类程序中判断历史局面是否存在的算法。算法基础该算法的的基础利用了按位异或运算的如下性质:A^B^B = AC++代码示例// mersenne_twister_engine constructor #include #include #include #include using namespac原创 2017-06-14 21:38:25 · 4992 阅读 · 0 评论