不是特别经常使用C++,所以用一用就忘记了,每次用就得查具体用法,坑得踩好几次,故把常用的都测试通,经常看,不要总是本本族就行了。也希望能对在读的你有所帮助。

主要包括C++最常用函数库及部分封装库:包括vector,hash_set, hash_map, 文件读写,时间,字符串处理,压缩,正则表达式,redis,文件系统,日志,参数解析,base64,json处理等等,简单易用。

下载地址:https://download.csdn.net/download/mj641893086/10346620

注:在centos6.2系统下测试没问题,有问题欢迎反馈。

使用方法:到test目录下,make,正常应该是可以编译的,main.cpp是各种测试,很容易看懂,后面会贴上代码,可以单独测试。在执行的时候,注意export LD_LIBRARY_PATH=../lib:$LD_LIBRARY_PATH就行。

#include "mutil/common.h"
#include "mutil/util.h"
#include "mutil/qbase64.h"
#include "mutil/qcompress.h"
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "boost/lexical_cast.hpp"
#include "boost/algorithm/string.hpp"
#include "boost/algorithm/string/regex.hpp"
#include "re2/re2.h"
#include <regex>
#include <time.h>
#include "boost/filesystem.hpp"
#include <fstream>
#include "glog/logging.h"
#include "gflags/gflags.h"
#include <omp.h>
#include "mutil/redis.h"using namespace std;
using namespace __gnu_cxx;
using namespace rapidjson;
using namespace boost;/*********************vector*****************/
void vector_test(){ //common.hvector<string> v;//push_backv.push_back("cdb");v.push_back("be");v.push_back("123");v.push_back("def");//erasev.erase(v.begin()+2);//iteratorvector<string>::iterator it;for(it = v.begin();it!=v.end();it++){cout<<*it<<endl;}//[]for(int i=0;i<v.size();i++){cout<<v[i]<<endl;}//clearv.clear();vector<string>().swap(v); //safety clearcout<<"v after clear's size:"<<v.size()<<endl;
}/*********************hash_set*****************/
void hash_set_test(){//common.hhash_set<string> hs;//inserths.insert("cdb");hs.insert("be");hs.insert("123");hs.insert("def");//findbool flag = true;if(hs.find("def")==hs.end())flag = false;cout<<"def in hash_set:"<<flag<<endl;flag = true;if(hs.find("abc")==hs.end())flag = false;cout<<"abc in hash_set:"<<flag<<endl;//erasehs.erase("123");//iteratorhash_set<string>::iterator it;for(it = hs.begin();it!=hs.end();it++){cout<<*it<<endl;}//clearhs.clear();hash_set<string>().swap(hs); //safety clearcout<<"hs after clear's size:"<<hs.size()<<endl;
}/*********************hash_map*****************/
void hash_map_test(){//common.hhash_map<string,int> hm;//set key valuehm["a"] = 1;hm["b"] = 2;hm["c"] = 3;//findbool flag = true;if(hm.find("d")==hm.end())flag = false;cout<<"d in hash_map:"<<flag<<endl;flag = true;if(hm.find("b")==hm.end())flag = false;cout<<"b in hash_map:"<<flag<<endl;//get valuecout<<hm["b"]<<endl;cout<<hm["d"]<<endl;//return default 0 and insert an new item 'd'//erasehm.erase("b");//iteratorhash_map<string,int>::iterator it;for(it=hm.begin();it!=hm.end();it++){cout<<"key:"<<it->first<<", value:"<<it->second<<endl;}//clearhm.clear();hash_map<string,int>().swap(hm);//safety clearcout<<"hm after clear's size:"<<hm.size()<<endl;
}/*********************base64*****************/
void base64_test(){//qbase64.h -lmutilstring s="abc";string s_b64 = qbase64_encode(s);cout<<"s_b64:"<<s_b64<<endl;s = qbase64_decode(s_b64);cout<<"s:"<<s<<endl;
}/*********************qcompress*****************/
void qcompress_test(){//qcompress.h -lz -lmutilstring s="abc";string s_c_b64 = qbase64_encode(qcompress(s));cout<<"s_c_b64:"<<s_c_b64<<endl;string s_origin = quncompress(qbase64_decode(s_c_b64));cout<<"s_origin:"<<s_origin<<endl;
}/*********************rapidjson*****************/
//rapidjson/document.h, rapidjson/writer.h, rapidjson/stringbuffer.h
void rapidjson_test(){ Document d;d.SetObject();//设置d为key-value型对象Document::AllocatorType& allocator = d.GetAllocator();//添加普通key-valued.AddMember("id","mj",allocator);d.AddMember("name",123,allocator);d.AddMember("class","xinji2",allocator);//添加key-数组Value location_array(rapidjson::kArrayType);//数组类型location_array.PushBack("beijing",allocator);location_array.PushBack("xian",allocator);location_array.PushBack("anhui",allocator);d.AddMember("location",location_array,allocator);//添加key-object(k-v)Value zimu_dic(rapidjson::kObjectType);//Object类型zimu_dic.AddMember("a",1,allocator);zimu_dic.AddMember("b",2,allocator);zimu_dic.AddMember("c",3,allocator);d.AddMember("zimu",zimu_dic,allocator);//json转stringrapidjson::StringBuffer buffer;rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);d.Accept(writer);cout<<buffer.GetString()<<endl;//string转jsonstring s = buffer.GetString();Document d1;d1.Parse<0>(s.c_str());if(d1.HasParseError()){cout<<"parse error!"<<endl;}else{cout<<"parse success!"<<endl;}Document::AllocatorType& allocator1 = d1.GetAllocator();//查询普通keyif(d1.HasMember("name"))cout<<"name:"<<d1["name"].GetInt()<<endl;if(d1.HasMember("id"))cout<<"id:"<<d1["id"].GetString()<<endl;//修改普通keyd1["name"].SetString("mj");d1["id"].SetInt(123);//查询arrayValue& loc_arr = d1["location"];//返回的是引用,直接修改即可for(int i=0;i<loc_arr.Size();i++)cout<<"location:"<<loc_arr[i].GetString()<<endl;//修改arrayloc_arr[1].SetString("xi'an");loc_arr.PushBack("jinzhong",allocator1);//查询Object(k-v)Value& zm_dic = d1["zimu"];//返回的是引用,直接修改即可Document::MemberIterator it;for(it = zm_dic.MemberBegin();it!=zm_dic.MemberEnd();it++){cout<<it->name.GetString()<<"<--->"<<it->value.GetInt()<<endl;}//修改Object(k-v)zm_dic["b"].SetInt(4);zm_dic.AddMember("d","666",allocator1);//删除keyd1.RemoveMember("class");//输出d1rapidjson::StringBuffer buffer1;rapidjson::Writer<rapidjson::StringBuffer> writer1(buffer1);d1.Accept(writer1);cout<<buffer1.GetString()<<endl;
}/*********************string*****************/
// boost/algorithm/string.hpp, boost/lexical_cast.hpp, boost/algorithm/string/regex.hpp
void string_test(){ string s=" Hello world for you world ok! \n";cout<<"s:\""<<s<<"\""<<endl;//trimstring s_tlc = trim_left_copy(s);string s_trc = trim_right_copy(s);string s_tc  = trim_copy(s);string s_tci = trim_copy_if(s,is_any_of("\n !"));cout<<"trim_copy_if:"<<s_tci<<endl;trim_right_if(s,is_any_of("\n "));//always used in pythontrim_left_if(s,is_any_of(" "));cout<<"after trim s:\""<<s<<"\""<<endl;//starts_with,ends_withcout<<"s starts_with \'hello\':"<<starts_with(s,"hello")<<endl;cout<<"s ends_with \'ok!\':"<<ends_with(s,"ok!")<<endl;//splitvector<string> v;split(v,s,is_any_of(" "));for(int i=0;i<v.size();i++)cout<<"v["<<i<<"]:"<<v[i]<<endl;split_regex(v,s,boost::regex("or"));//按字符串分割,需要boost/algorithm/string/regex.hpp, -lboost_regexfor(int i=0;i<v.size();i++)cout<<"v_or["<<i<<"]:"<<v[i]<<endl;//joinstring s_new = join(v,"**");cout<<"join s_new is:\""<<s_new<<"\""<<endl;//find,substrint pos = s.find("test");if(pos==-1)cout<<"not find test!"<<endl;pos = s.find("for");if(pos!=-1){string s_sub = s.substr(pos,s.length()-pos);cout<<"substring:"<<s_sub<<endl;}//replacestring s_r = replace_all_copy(s,"or","##");cout<<"s_r:"<<s_r<<endl;//lexical_casts = "123";int s_int = lexical_cast<int>(s);cout<<"s_int:"<<s_int<<endl;
}/******************re********************/
// re2/re2.h -lre2 Makefile需要添加:RE2_CXXFLAGS?=-std=c++11 -pthread
void re_test(){ //Matchstring s = "http://www.baidu.com/8686886.html?code=3";string reg = "http://www.baidu.com/\\d+.html";cout<<"PartialMatch:"<<RE2::PartialMatch(s,reg)<<endl;cout<<"FullMatch:"<<RE2::FullMatch(s,reg)<<endl;//Submatch Extractionstring reg_s = "http://www.baidu.com/(\\d+).html";string id = "";RE2 re(reg_s);//compile before usedRE2::PartialMatch(s,re,&id);cout<<"match id:"<<id<<endl;//C++自带regex, regex.hstd::regex reg2(reg);cout<<"C++ regex_match:"<<std::regex_match(s,reg2)<<endl;//same as FullMatch
}/******************time********************/
void time_test(){ //time.h//时间戳,可进行计算time_t t = time(NULL);printf("The calendar time now is %d\n",t);//sleepsleep(3);int id = t/30;cout<<id<<endl;//时间戳格式化time_t tts = 1522444662;struct tm* timeinfo = localtime(&tts);char buf[80];strftime(buf,sizeof(buf),"%Y-%m-%d %H:%M:%S",timeinfo);cout<<buf<<endl;//格式化时间转时间戳string ftime = "2018-03-31 05:17:42";time_t tts2 = mutil::time2tts(ftime);// mutil/util.h -lmutilcout<<"tts:"<<tts2<<endl;
}/******************filesystem********************/
void file_test(){ //boost/filesystem.hpp -lboost_filesystem//current dirstring cur_dir = filesystem::initial_path<filesystem::path>().string();cout<<"cur_dir:"<<cur_dir<<endl;filesystem::path cur_path = filesystem::initial_path<filesystem::path>();//parent dirfilesystem::path parent_dir = cur_path.parent_path();cout<<"parent_dir:"<<parent_dir.string()<<endl;//filename,stem(前缀),extension(扩展),file_sizestring cpp_file = cur_dir+"/test.cpp";filesystem::path cpp_path(cpp_file);string filename = cpp_path.filename().string();cout<<"filename:"<<filename<<endl;string stem = cpp_path.stem().string();string extension = cpp_path.extension().string();cout<<"stem:"<<stem<<endl;cout<<"extension:"<<extension<<endl;int file_size = filesystem::file_size(cpp_path);cout<<"file_size:"<<file_size<<endl;//last_write_timeint last_write_time = filesystem::last_write_time(cpp_path);cout<<"last_write_time:"<<last_write_time<<endl;if(time(NULL)-last_write_time>10)cout<<"modified 10s ago"<<endl;//existsstring t_file = cur_dir+"/t";cout<<t_file<<" exists:"<<filesystem::exists(t_file)<<endl;//file_stat:is_regular_file,is_directory,is_symlinkcout<<cpp_path<<" is_regular_file:"<<filesystem::is_regular_file(cpp_path)<<endl;cout<<cpp_path<<" is_directory:"<<filesystem::is_directory(cpp_path)<<endl;string mlib = cur_dir+"/mlib";cout<<mlib<<" is_symlink:"<<filesystem::is_symlink(mlib)<<endl;//remove,rename,copy_fileif(filesystem::exists(t_file))filesystem::remove(t_file);string bak_path = cpp_file+".bak";string rename_path = cpp_file+".rename";if(filesystem::exists(bak_path))filesystem::remove(bak_path);if(filesystem::exists(rename_path))filesystem::remove(rename_path);filesystem::copy_file(cpp_file,bak_path);filesystem::rename(bak_path,rename_path);filesystem::remove(rename_path);//创建目录string new_dir = cur_dir+"/new_dir";if(!filesystem::exists(new_dir))filesystem::create_directories(new_dir);filesystem::remove(new_dir);//遍历目录for(filesystem::recursive_directory_iterator it(cur_dir);it!=filesystem::recursive_directory_iterator();it++){cout<<"dir_file:"<<it->path()<<endl;}
}/******************read-write********************/
void read_write_test(){string cur_dir = filesystem::initial_path<filesystem::path>().string();string fpath = cur_dir+"/a.txt";string fbpath = cur_dir+"/a.bin";/****C:<stdio.h>****///writeFILE* fp = fopen(fpath.c_str(),"w+");fputs("sss\n",fp);fputs("aaa",fp);fprintf(fp,"%s\t%d\t%s\n","bbb",123,"ccc");fprintf(fp,"ddd");fclose(fp);//readfp = fopen(fpath.c_str(),"r");int max_line_len = 1024;char buf[max_line_len];while(!feof(fp)){fgets(buf,max_line_len,fp);//遇到\n或者字符数为max_line_len-1则读行完毕string s = buf;s = trim_right_copy_if(s,is_any_of("\n"));//读到\n会在结尾cout<<"read_content:\""<<s<<"\""<<endl;}fclose(fp);//write-binaryfp = fopen(fbpath.c_str(),"wb");fprintf(fp,"%s\t%d\n","xiaoma",123);int a = 456;int b[3] = {56,78,910};fwrite(&a,sizeof(int),1,fp);fwrite(&b,sizeof(int),sizeof(b)/sizeof(int),fp);fclose(fp);//read-binaryfp = fopen(fbpath.c_str(),"rb");char name[100];int id;fscanf(fp,"%s\t%d\n",&name,&id);cout<<"name:"<<name<<endl;cout<<"id:"<<id<<endl;int c[4];fread(&c,sizeof(int),sizeof(c)/sizeof(int),fp);for(int i=0;i<4;i++)printf("c[%d]:%d\n",i,c[i]);fclose(fp);/****C++:<fstream>****///writefstream f(fpath.c_str(),ios::out);f<<"aaa"<<endl;f<<"bbb"<<endl;f<<"ccc"<<endl;f.close();//readf.open(fpath.c_str(),ios::in);string s;while(getline(f,s)){cout<<"c++ read:"<<s<<endl;}f.close();//write-binaryofstream fb(fbpath.c_str(),ios::binary);int p[3] = {33,44,55};double q[4] = {3.3,4.4,5.5,6.6};fb.write((char*)p,sizeof(p));fb.write((char*)q,sizeof(q));fb.close();//read-binaryifstream fbi(fbpath.c_str(),ios::binary);int pi[3];double qi[4];fbi.read((char*)pi,sizeof(pi));fbi.read((char*)qi,sizeof(qi));for(int i=0;i<3;i++){printf("p[%d]:%d\n",i,pi[i]);}for(int i=0;i<4;i++){printf("q[%d]:%lf\n",i,qi[i]);}fbi.close();
}/******************glog********************/
void glog_test(){ // glog/logging.h -lglog//initgoogle::InitGoogleLogging("test");//日志文件前缀FLAGS_log_dir = "./log";          //设置日志目录FLAGS_alsologtostderr = true;     //设置日志消息除了日志文件之外是否去标准输出//FLAGS_logtostderr = true;         //设置日志消息是否转到标准输出而不是日志文件FLAGS_colorlogtostderr = true;    //设置记录到标准输出的颜色消息(如果终端支持)//logLOG(INFO)<<"info test";int a = 11;LOG(ERROR)<<"error test";LOG(WARNING)<<"warning test";//LOG(FATAL)<<"fatal test";      //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序LOG_IF(ERROR,a%2!=0)<<"a is jishu";CHECK(a>10)<<"if a<=10 will Print this log(fatal), the program will break";//closegoogle::ShutdownGoogleLogging();//程序完结时必须有,否则会内存泄露
}/******************gflags********************/
// gflags/gflags.h -lgflags
//定义参数
DEFINE_string(ip,"127.0.0.1","your IP~");
DEFINE_int32(port,9090,"your port~");
DEFINE_bool(mflag,true,"mflag~");//-nomflag表示false,-mflag表示true
DEFINE_double(ratio,1.05,"retry connect ratio~");/******************OpenMP********************/
void omp_test(){ // omp.h -fopenmpomp_set_num_threads(4);#pragma omp parallel //后面括号模块是并行的内容  {  sleep(1);#pragma omp critical //紧跟的一行语句会上锁,用于变量同步操作cout << "Hello" << ", I am Thread " << omp_get_thread_num() << endl;  #pragma omp barrier  //路障:等待所有执行完才能执行#pragma omp for      //for循环并行for(int i=0;i<10;i++){cout<<"out:"<<i<<", Thread-"<< omp_get_thread_num() << endl;}}
}/******************redis********************/
void redis_test(){ // mutil/redis.h -lmutil -lhiredis//connectmutil::Redis *rds = new mutil::Redis();bool conn_flag = rds->connect_redis("your.host.name",8888,1,"password");if(!conn_flag)cout<<"connect error~"<<endl;elsecout<<"connect ok~"<<endl;//getstring value;if(rds->get("key",value))cout<<"value:"<<value<<endl;//setrds->set("redis","wawawa");rds->get("redis",value);cout<<"value:"<<value<<endl;delete rds;
}int main(int argc,char* argv[]){vector_test();hash_set_test();hash_map_test();base64_test();qcompress_test();rapidjson_test();string_test();re_test();time_test();file_test();read_write_test();glog_test();//gflags_test//初始化gflags::SetVersionString("1.0.0");//--version的时候会显示string usage_str = "Usage:";usage_str += argv[0];gflags::SetUsageMessage(usage_str);if(argc<2){gflags::ShowUsageWithFlagsRestrict(argv[0], "test");//注意:第二个参数是限制的model_namereturn 0;}//参数解析gflags::ParseCommandLineFlags(&argc,&argv,true);//true表示不保留定义的flagscout<<"ip:"<<FLAGS_ip<<endl;cout<<"port:"<<FLAGS_port<<endl;cout<<"mflag:"<<FLAGS_mflag<<endl;cout<<"ratio:"<<FLAGS_ratio<<endl;omp_test();redis_test();
}

常用C++库及测试程序相关推荐

  1. 1000+ 常用 Python 库一览

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源 | 法纳斯特 这次给大家总结整理了1000+常用Python库 ...

  2. wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...

    作者 | 李明江 张良均 周东平 张尚佳 来源 | 大数据DT 原文 | 38个常用Python库:数值计算.可视化.机器学习等8大领域都有了 Python作为一个设计优秀的程序语言,现在已广泛应用于 ...

  3. python第三方库排行-Python模块汇总(常用第三方库)

    模块 定义 计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里.在python里,一个.py文件就是一个模块 优点: 提高代码的可维护性 ...

  4. python标准库和第三方库_python常用标准库及三方库

    python 常用标准库及三方库 作者: yegle 链接: https://www.zhihu.com/question/20501628/answer/153211 84 著作权归作者所有.商业转 ...

  5. python常用库教程_这几个python常用的库你必须知道!

    随着人工智能时代的到来,python变得更加流行.受欢迎,功能强大.简单易学.容易入门.应用广泛等,掀起了学习热潮,现在越来越多人转行都会学习python语言.为了让大家快速掌握python,今天为大 ...

  6. 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序

    使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序 实现功能 C++实现代码 实现功能 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序 C++实现代码 ...

  7. Boost enable_if库的测试程序

    boost::core模块Boost enable_if库的测试程序 实现功能 C++实现代码 实现功能 boost::core模块Boost enable_if库的测试程序 C++实现代码 #inc ...

  8. mfc140dll 丢失 微软常用运行库_集成最新运行库、一键安装、一键到位,运行库操作简单!...

    背景有很多童鞋在安装诸如PS.vc++等软件总会提示缺少关键组件或者运行框架,也有在后台问我的,所以今天就给大家分享一下一些电脑安装软软件或者游戏常用的运行库,号主找了一些并且写了批处理直接运行就可以 ...

  9. mfc140dll 丢失 微软常用运行库_微软常用运行库合集 2020.9月(32amp;64位)

    每日一谈 电脑在刚买来的时候,我们常常会思考一个问题,那就是微软的运行库有必要安装吗?微软运行库有什么用?其实在这里我想说,微软运行库主要是运行计算机软件的,例如一些测绘的职业人员,需要用到Auto ...

  10. pythonos pathjson_python进阶05 常用问题库(1)json os os.path模块

    python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...

最新文章

  1. 流程控制if、while、for
  2. 字符串的全排列和组合算法
  3. mysql topn_TopN语句
  4. 【HDU - 1702 】ACboy needs your help again! (栈和队列,水题模拟)
  5. 做开发,这几种锁机制你不得不了解一下
  6. backgroundworker 在执行dowork事件时该如何取消_澳航官宣!明年上半年起,机场所有售票处和服务台永久取消,订票改签等只能“自助”...
  7. 月份对比_行业洞察 | 10月份行业概览amp;头部广告主盘点
  8. 带拼音的,城市筛选组件
  9. maxscale跨库分片的限制
  10. aspupload上传中文文件名乱码解决方法
  11. 3.9 拆解小红书爆文,流量密码原来是这些【玩赚小红书】
  12. 100层楼2个鸡蛋,测试其最低破碎楼层问题
  13. ad19电气规则检查_AD19中PCB设计常用规则-电气规则设置
  14. IOS NDDictionary使用中value遇到no summary如何判断为NULL
  15. 对浏览器内核的理解和常见的浏览器内核
  16. LeetCode 每日一题1006. 笨阶乘
  17. PhishTank恶意URL数据集分享
  18. python中的pil模块_初学python的PIL模块
  19. CUMTOJ算法作业二
  20. QQ空间相册脸部识别

热门文章

  1. voyage java_Voyage:采用Java实现的基于netty轻量的高性能分布式RPC服务框架
  2. info There appears to be trouble with your network connection. Retrying...
  3. EXCEL兼容性检查
  4. 【IoT】战略:BEM 战略解码 - 好的战略需要好的执行
  5. php抢票程序,python并发编程多进程 模拟抢票实现过程
  6. PeopleSoft介绍
  7. 【巴马火麻茶】调节三高、治疗失眠、排毒减肥,轻松get长寿的秘密!
  8. Python学习两个月心得
  9. 实验2 格式化输入输出和分支语句
  10. Smartbi的下载安装教程