【C/C++学院】0904-boost智能指针/boost多线程锁定/哈希库/正則表達式
boost_array_bind_fun_ref
Array.cpp
#include<boost/array.hpp>
#include <iostream>
#include <string> using namespace std; using namespace boost; void mainA ()
{ array <int, 5> barray = { 1, 2, 3, 4, 5 };
barray[0] = 10;
barray.at(4) = 20;
int *p = barray.data();//存储数组的指针
for (int i = 0; i < barray.size();i++)
{
cout << barray[i] << " " << p[i] << endl;
} array<string, 3> cmd = { "calc", "notepad", "tasklist" }; cin.get();
}
Bind.cpp
#include <iostream>
#include <string>
#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <functional> using namespace std; using namespace boost; //绑定函数的默认值,继承二进制函数类的全部类容
class add:public std::binary_function<int ,int,void>
{
public:
void operator()(int i,int j) const
{
std::cout << i + j << endl;
}
}; void add(int i, int j)
{
std::cout << i + j << endl;
} void mainB()
{
vector<int> myv;
myv.push_back(11);
myv.push_back(23);
myv.push_back(34); //for_each(myv.begin(), myv.end(), bind1st(add(),10));
for_each(myv.begin(), myv.end(), bind(add, 13, _1)); //bind设置默认參数调用,函数副本机制。不能拷贝构造 cin.get();
}
Fun.cpp
#include <iostream>
#include <string>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <vector>
#include <algorithm>
#include <functional>
#include <stdlib.h> using namespace std; using namespace boost; void mainC()
{
//atoi //char * to int
boost::function<int(char *)> fun = atoi;
cout << fun("123") + fun("234") << endl;
fun = strlen;
cout << fun("123") + fun("234") << endl; cin.get();
} void mainD()
{
boost::function<int(char *)> fun = atoi;
cout << fun("123") + fun("234") << endl;
fun = boost::bind(strcmp, "ABC", _1);
cout << fun("123") << endl;
cout << fun("ABC") << endl; cin.get();
} class manager
{
public:
void allstart()
{
for (int i = 0; i < 10;i++)
{
if (workid)
{
workid(i);
}
}
}
void setcallback(boost::function<void(int)> newid)//绑定调用
{
workid = newid;
}
public:
boost::function<void(int)> workid;
}; class worker
{
public:
void run(int toid)
{
id = toid;
cout << id << "工作" << endl;
}
public:
int id;
}; void mainE()
{
manager m;
worker w;
//类的成员函数须要对象来调用,绑定了一个默认的对象
m.setcallback(boost::bind(&worker::run, &w, _1)); m.allstart(); cin.get();
}
Ref.cpp
#include <iostream>
#include <string>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <vector>
#include <algorithm>
#include <functional>
#include <stdlib.h> using namespace std; using namespace boost; void print(std::ostream &os,int i)
{
os << i << endl;
} void mainF()
{
//不能够拷贝的对象能够用ref
boost::function<void(int)> pt = boost::bind(print,boost::ref(cout), _1);
vector<int > v;
v.push_back(11);
v.push_back(12);
v.push_back(13);
for_each(v.begin(), v.end(), pt); std::cin.get();
}
boost智能指针
RAII原理.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <string> using namespace std; class mystr
{
public:
char *p = nullptr;
public:
mystr(const char *str)
{
cout << "构建" << endl;
int length = strlen(str);
p = new char[length + 1];
strcpy(p, str);
p[length] = '\0';
}
~mystr()
{
cout << "销毁" << endl;
delete[] p;
}
}; void go()
{
char *p = new char[100];
mystr str1 = "ABCD";//RAII避免内存泄漏,普通情况下,堆上的内存当作栈上来使用
//栈内存有限。希望自己主动释放,用非常大的内存。
} void mainHG()
{
go(); cin.get();
}
Smartpointer原理.cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <stdlib.h> using namespace std; template<class T>
class pmy
{
public:
pmy()
{
}
pmy(T *t)
{
p = t;
}
~pmy()
{
if (p!=nullptr)
{
delete p;
}
}
T operator *()
{
return *p;
}
private:
T *p=nullptr;
}; class Test
{
public:
Test()
{
cout << "Test create" << endl;
}
~Test()
{
cout << "Test delete" << endl;
}
}; void run()
{
pmy<Test> p(new Test);//智能指针,智能释放
//*p;
} void mainH()
{
run(); cin.get();
}
Smartpointer.cpp
#include <iostream>
#include <vector>
#include<algorithm>
#include <boost/scoped_ptr.hpp>
#include <boost/scoped_array.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/shared_array.hpp>
#include<boost/weak_ptr.hpp>
#include <windows.h> using namespace std; void mainI()
{
boost::scoped_ptr<int> p(new int);//自己主动释放内存
*p = 12;
cout << *p.get() << endl;
p.reset(new int);
*p.get() = 3;
boost::scoped_ptr<int> pA(nullptr);//独占内存
//pA = p; cout << *p.get() << endl;
cin.get();
} void mainG()
{
boost::scoped_array<int> p(new int[10]);//自己主动释放内存
//boost::scoped_array<int> pA(p);独享指针
*p.get() = 1;
p[3] = 2;
p.reset(new int[5]);//仅仅能指针 cin.get();
} void show(boost::shared_ptr<int> p)
{
cout << *p << endl;
} void mainK()
{
vector<boost::shared_ptr<int> > v;
boost::shared_ptr<int> p1(new int(11));
boost::shared_ptr<int> p2(new int(12));
boost::shared_ptr<int> p3(p2);//拷贝
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
for_each(v.begin(), v.end(), show); cin.get();
} class runclass
{
public:
int i = 0;
public:
runclass(int num) :i(num)
{
cout << "i create" <<i<< endl;
}
runclass()
{
cout << "i create" << i << endl;
}
~runclass()
{
cout << "i delete" <<i<< endl;
}
void print()
{
cout << "i =" << i<<endl;
}
}; void testfun()
{
boost::shared_ptr<runclass> p1(new runclass(10));
boost::shared_ptr<runclass> p2(p1);
boost::shared_ptr<runclass> p3(p1);
p1.reset(new runclass(12));
p1->print();
p2->print();
p3->print();
} void testfunarray()
{
boost::shared_array<runclass> p1(new runclass[5]);
boost::shared_array<runclass> p2(p1);
} void mainL()
{
//testfun();
testfunarray(); cin.get();
} DWORD WINAPI reset(LPVOID p)
{
boost::shared_ptr<int > *sh = static_cast<boost::shared_ptr<int > *> (p);
sh->reset();//指针的重置,释放内存
std::cout << "指针运行释放" << endl;
return 0;
} DWORD WINAPI print(LPVOID p)
{
boost::weak_ptr<int > * pw = static_cast<boost::weak_ptr<int > *>(p);
boost::shared_ptr<int > sh = pw->lock();//锁定不能够释放
Sleep(5000);
if (sh)
{
std::cout << *sh << endl;
}
else
{
std::cout << "指针已经被释放" << endl;
} return 0;
} void main123()
{
boost::shared_ptr<int> sh(new int(99));
boost::weak_ptr<int > pw(sh);
HANDLE threads[2];
threads[0] = CreateThread(0, 0, reset, &sh, 0, 0);//创建一个线程
threads[1] = CreateThread(0, 0, print, &pw, 0, 0);
Sleep(1000); WaitForMultipleObjects(2, threads, TRUE, INFINITE);//等待线程结束 cin.get();
}
boost多线程锁定
Thread.cpp
#include <iostream>
#include <vector>
#include<algorithm>
#include<boost/thread.hpp>
#include <windows.h> using namespace std;
using namespace boost; void wait(int sec)
{
boost::this_thread::sleep(boost::posix_time::seconds(sec));
} void threadA()
{
for (int i = 0; i < 10;i++)
{
wait(1);
std::cout << i << endl;
}
} void threadB()
{
try
{
for (int i = 0; i < 10; i++)
{
wait(1);
std::cout << i << endl;
}
}
catch (boost::thread_interrupted &)
{ }
} void mainO()
{
boost::thread t(threadA );
wait(3);
//t.interrupt();
t.join(); cin.get();
}
哈希库
Unorderred.cpp
#include <iostream>
#include<boost/unordered_set.hpp>
#include<string> using namespace std; void mainAAAC()
{
boost::unordered_set<std::string> myhashset;
myhashset.insert("ABC");
myhashset.insert("ABCA");
myhashset.insert("ABCAG"); for (auto ib = myhashset.begin(); ib != myhashset.end();ib++)
{
cout << *ib << endl;
}
std::cout << (myhashset.find("ABCA1") != myhashset.end()) << endl; cin.get();
}
正則表達式
Regex.cpp
#include <boost/regex.hpp>
#include <locale>
#include <iostream>
#include <string> using namespace std; void mainA123()
{
std::locale::global(std::locale("English"));
string str = "chinaen8Glish";
boost::regex expr("\\w+\\d\\u\\w+");//d代表数字,
//匹配就是1,不匹配就是0
cout << boost::regex_match(str, expr) << endl; cin.get();
} void mainB123()
{
//std::locale::global(std::locale("English"));
string str = "chinaen8Glish9abv";
boost::regex expr("(\\w+)\\d(\\w+)");//d代表数字,
boost::smatch what;
if (boost::regex_search(str,what,expr))//依照表达式检索
{
cout << what[0] << endl;
cout << what[1] << endl;
}
else
{
cout << "检索失败";
}
cin.get();
} void mainC1234()
{
string str = "chinaen8 Glish9abv";
boost::regex expr("\\d");//d代表数字,
string kongge = "______";
std::cout << boost::regex_replace(str, expr, kongge) << endl; cin.get();
}
【C/C++学院】0904-boost智能指针/boost多线程锁定/哈希库/正則表達式的更多相关文章
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- [5] 智能指针boost::shared_ptr
[1]boost::shared_ptr简介 boost::shared_ptr属于boost库,定义在namespace boost中,包含头文件#include<boost/shared_p ...
- [6] 智能指针boost::weak_ptr
[1]boost::weak_ptr简介 boost::weak_ptr属于boost库,定义在namespace boost中,包含头文件 #include<boost/weak_ptr.hp ...
- Boost智能指针使用总结
内存管理是一个比较繁琐的问题,C++中有两个实现方案: 垃圾回收机制和智能指针.垃圾回收机制因为性能等原因不被C++的大佬们推崇, 而智能指针被认为是解决C++内存问题的最优方案. 1. 智能指针定义 ...
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...
- Boost智能指针-基础知识
简单介绍 内存管理一直是 C++ 一个比較繁琐的问题,而智能指针却能够非常好的解决问题,在初始化时就已经预定了删除.排解了后顾之忧.1998年修订的第一版C++标准仅仅提供了一种智能指针:std::a ...
- C++ 智能指针 boost::scoped_ptr分析
1.scoped_ptr的实现原理及特性 特性:scoped_ptr和auto_ptr类似,但最大的区别就是不能转让管理权限,也就是说scoped_ptr禁止用户进行拷贝和赋值 实现原理:如何才能禁止 ...
- [4] 智能指针boost::scoped_ptr
[1]boost::scoped_ptr简介 boost::scoped_ptr属于boost库,定义在namespace boost中,包含头文件#include <boost/scoped_ ...
- 关于智能指针boost::shared_ptr
boost库中的智能指针shared_ptr, 功能强大, 且开销小,故受到广大coder的欢迎. 但在实际的使用过程中,笔者也发现了一些不足. 1.定制的删除器 shared_ptr除了可以使用默认 ...
随机推荐
- android 调用系统相机拍照 获取原图
好吧,为了这个问题又折腾了一整天.之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就 ...
- 18、利用 Windows Device Portal 获取用户闪退 dump
当 uwp在用户的电脑上发生了闪退,并且由于用户距离较远,不便于使用 VS进行远程 Debug,更不可能让用户安装 Visual Studio进行分析的时候,在用户的电脑上收集 dump 是一种有效的 ...
- 【开发】MFC到Delphi的皮肤移植
最近一直在学嵌入式,蛋疼啊,专业学软件的去搞硬件原理,真心有点伤不起,比较无聊,希望尽早脱离这个状态. 中午在林同学那里看到他在MFC上应用了Skin++皮肤,这是一款通用的软件换肤套件,支持各 ...
- strrchr()函数
函数简介 函数名称: strrchr 函数原型:char *strrchr(const char *str, char c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str ...
- 基于python3在nose测试框架的基础上添加测试数据驱动工具
[本文出自天外归云的博客园] Python3下一些nose插件经过2to3的转换后失效了 Python的nose测试框架是通过python2编写的,通过pip3install的方式安装的nose和相关 ...
- Windows + Ubuntu双系统时间不一致
在安装Ubuntu和Windows双系统的情况下,Ubuntu的时间总会和Windows的时间相差8小时,原因在于widows认为BIOS时间是本地时间,Ubuntu认为BIOS时间是UTC时间 su ...
- mysql防止误删除的方法
为了防止在更新和删除的时候,没有写where条件而对全部数据进行操作,mysql提供了一个参数来防止此情况的发生 需要在启动mysql的时候,增加参数--i-am-a-dummy含义是我是新手,或者使 ...
- Android 开发自己的网络收音机4——读取XML文件的电台数据
国内外的电台数据很多,起码有好几百,所以把这些数据都写到代码里面是不实际的.只能写成一个数据文件,程序启动的时候再去加载.保存这些简单数据,我们肯定会优先使用XML文件,今天讲讲如何读取XML里面的数 ...
- C语言 · 递归倒置字符数组
算法提高 递归倒置字符数组 时间限制:1.0s 内存限制:512.0MB 问题描述 完成一个递归程序,倒置字符数组.并打印实现过程 递归逻辑为: 当字符长度等于1时,直接返回 否则, ...
- Android ——Toolbar开发实践总结(转)
过年前发了一篇介绍 Translucent System Bar 特性的文章 Translucent System Bar 的最佳实践 ,收到很多开发者的关注和反馈.今天开始写第二篇,全面的介绍一下 ...