C++ 11
C++程序员Carea
十年一线开发经验,热爱 C++ ,热爱编程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
std::thread 与类对象结合
代码】stdthread与类对象结合。原创 2022-07-21 15:17:49 · 512 阅读 · 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 · 1057 阅读 · 0 评论 -
C++11 多线程文章列表
我的C++ 文章列表 thread官方 创建可执行线程对象,调用join执行 joinable() 判断该线程是不是可执行线程 join() 当线程执行完毕时该函数退出:一直等待线程执行完毕。对于可执行thread对象,必须要调用join()函数。 join和detach的区别 一般情况都使用join来准确的知道线程已经执行完毕并可以析构。 std::async 非常棒的一篇...原创 2019-09-22 23:10:20 · 394 阅读 · 0 评论 -
C++11 chrono计时
我的C++ 文章列表 下面的代码开了好几个线程,等所有线程都运行完毕,统计用了多少时间 其中,每个thread对象都应该调用join,以保证每一个线程在多线程环境下都可以完整的运行,而不被CPU调度而回不来错过了剩下没执行部分的执行。 #include <iostream> // std::cout #include <thread> /...............转载 2019-09-11 11:17:17 · 3636 阅读 · 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 · 2315 阅读 · 0 评论 -
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 · 3071 阅读 · 0 评论 -
C++ 原始指针、shared_ptr、unique_ptr分别在什么场景下使用
开发中一直萦绕我的一个困惑是:智能指针和原始指针什么场景怎么用? 现在终于有了答案: 1 两种指针的天赋:智能指针天生负责对象生命期管理;所以生命期对象全都由unique_ptr和shared_ptr来管理。 2 两种指针的天赋:原始指针天生不负责对象生命周期管理;所以使用动态对象均通过原始指针来使用(参考各种第三方库QT/BCG/OS API等等)。 ...原创 2019-04-03 14:26:53 · 7453 阅读 · 7 评论 -
C++11复制控制
复制控制的内容 复制(拷贝)控制:拷贝构造、拷贝赋值、移动 构造、移动赋值、析构 一般来说,用户需要定义的场景是: 1 析构函数 => 拷贝 + 赋值 需要析构的类也基本上需要拷贝和赋值 2 拷贝<=>赋值 需要拷贝的类也需要赋值 3 default 我们要求编译器生成合成版本,这通常是值类型的类 4 delete阻止拷贝 被删除的函数是 指我们声明了这个...原创 2019-03-11 09:00:00 · 419 阅读 · 0 评论 -
C++异常的标准用法
C++标准本身提供的异常类完全能够满足任何规模程序的使用。 为何要用异常 下面首先引用《C++ 程序设计语言》中的段落来描述C++异常的目标(虽然该书描述为何需要异常时已经非常全面,这里只简单列举最为重要的思想): 1 当程序是由相互分离的模块组成时,库的作者可以检查出运行时错误,但是一般却不知道怎样去处理他们(抛出异常);用户的代码知道如何处理他们(捕获异常),却又无法检查它们(因为异常发生...原创 2018-10-24 11:01:19 · 2423 阅读 · 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 · 2130 阅读 · 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 · 15373 阅读 · 0 评论 -
Zobrist Hash算法的基础:按位异或运算的性质
用途 Zobrist Hash算法是各类棋类程序中判断历史局面是否存在的算法。 算法基础 该算法的的基础利用了按位异或运算的如下性质:A^B^B = A C++代码示例 // mersenne_twister_engine constructor #include #include #include #include using namespac原创 2017-06-14 21:38:25 · 5693 阅读 · 0 评论 -
C++11的字符串与数值间的类型转换:to_string() stoi stol stoul stoll stof stod stold
知道了C++的I/O设施之后,这些就变的很简单了。如果你经常使用,时间长了就会有感觉。这个事情是多此一举吗?就当是练习吧,知道原理之后,你会觉得用起来更舒畅,更喜欢C++了。 #include #include #include #include #include #include using namespace std; template Result lexical_cast(原创 2014-11-17 09:08:47 · 9941 阅读 · 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 · 2934 阅读 · 2 评论 -
6.5 项目2 文本文件单词搜索程序
看完了这一节,就有想自己实现一下的感觉。 主要是体验一下作者对交互类的设计思路,以及shared_ptr运用的正统方法和小的细节。 按照书上的实现代码如下: #include #include #include #include #include #include #include #include #include using namespace std; typede原创 2016-12-08 14:08:51 · 2197 阅读 · 0 评论 -
C++内存管理利器shared_ptr V2.0
此只能指针已经被纳入C++11,只因它实在是我们太需要它了! 如下的这些方面是我们需要它的理由 (1)引用计数让你摆脱delete的使用,只要有一个指针对象没有被析构,管理的对象就不会被析构,所以你可以按值传递给函数,按值从函数返回 (2)提供了变参工厂函数:make_shared<T>(...),让你摆脱new的出现 (3)获取原始指针的成员函数:get(),可以让你在需要原...原创 2014-03-02 20:41:42 · 1917 阅读 · 0 评论 -
C++复制控制(包括移动语义) 更新于2020-02-15
C++移动语义 移动语义顾名思义是内存数据的移动,实际就是内存数据所有权的转移。 目的: 1 函数可以直接返回值类型的对象而不发生对象拷贝 2 除了函数返回值,自定义类型的普通赋值也可以走移动语义,目的相同:减少内存开辟和释放(RapidJson库就是这种情况) 例如:vector<int> fun(void); 由于vector的移动构造函数会将fun内部返回的vect...原创 2016-08-23 18:38:22 · 1606 阅读 · 0 评论 -
设计模式(四)std::function助力抽象工厂和工厂方法
抽象工厂Abstract Factory 意图:用工厂类的不同成员函数来返回不同类型的对象。这些不同的对象往往是有着共同的基类,最终是想利用多态。而多态已经被function+bind取代,所以这个模式没啥意义! 特点:使用智能指针获取对象,而不是暴露原始指针。 代码: #include "boost/smart_ptr.hpp" #include "boost/wea...原创 2016-03-16 11:44:57 · 4529 阅读 · 0 评论 -
std::unique_ptr
https://cplusplus.com/reference/memory/unique_ptr/operator[]/原创 2016-05-04 16:56:22 · 927 阅读 · 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" #include using namespace st原创 2016-03-13 14:41:37 · 3328 阅读 · 0 评论
分享