C++
c++语言
wsj_
勤奋者,进步乎。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试之——求最长回文子串长度
最近太忙,好几天没巩固基础了。今天,求一个字符串你的最长回文子串。思路:回文字符串就是说该字符串从前往后和从后往前的内容是一样的。所以,可以用指针指向数组的某一元素,从该元素向后和向前遍历,如果一样则说明该子串是回文子串。比如"abcdefe"中“efe”就是一个回文字符串。当然“abba”中"abba"就是一个回文字符串。所以说,回文字符串可以是单数,也可以是双数。#include<iostream>int getHuiWenSubStr(char* str, int leng原创 2020-06-08 15:35:11 · 510 阅读 · 0 评论 -
线程安全的C++单例模式
感觉自己最近一直重拾校招时候的知识。不过现在看很多问题比校招时候更容易理解,并且能够学会运用。只求自己抓紧时间,能够抓住每次来之不易的机会吧。今天,写一个线程安全的C++单例模式。1.所谓单例模式,就是让该类只实例化一个对象。优点:①减少内存,减少资源的多重占用。②该类实例化一个对象,减少系统开销。缺点:①没有接口,扩展难。②和单一职责原则冲突。(一个类的定义就是定义了一套逻辑,不在意实例化了几个对象)2.代码实现单例懒汉式单例模式(懒汉,只有在饿的时候才去蒸馒头)#include&原创 2020-05-19 23:47:40 · 509 阅读 · 0 评论 -
boost库解析读取xml文件,生成数据库文件,并向数据库中写表。
今天实战用boost库中的方法,读取xml格式文件。博文中涉及到xml的解析,xml内容的提取,数据库的创建,已经向数据库中添加表,并向表中写内容。xml文件所在的目录:xml的文件内容:具体代码实现:#include<iostream>//起名namespace bfs = boost::filesystem;//创建一个db,我们使用sqlite这种小型数据库,指针使用unique指针。std::unique_ptr<SQLite::Database>原创 2020-05-17 01:38:44 · 862 阅读 · 0 评论 -
C++——友元函数的介绍,使用及利与弊。
面试的时候面试官问到了友元函数,自己其实之前对友元函数不是特别熟悉,只是略知一二;当然,回答的不是很让面试官满意,今天总体的再学习一下友元函数。1.什么是友元函数?特点:①在类中声明的以friend关键字修饰的函数。②形式表现:friend 返回类型 函数名 参数列表;#include<iostream>class func{public: func(int a) : m_a(a) {} void generalFunc(); friend void friendfu原创 2020-05-15 23:34:55 · 1799 阅读 · 0 评论 -
面试常见算法——斐波那契数列
今晚八点,接受了某大厂的后台开发工程师的岗位电话面试。第一面而已,时常40多分钟,过程有顺畅的部分,也有很坎坷的部分。现在过了几个小时,感觉自己真的很差劲啊,还是要勤学苦练。一番反思之后,补个漏洞吧。也算是自己不白白被这一面。斐波那契数列问题:一个楼梯有n阶,一次走1步或者2步,请问到顶有多少种走法。分析:台阶数行走方式 & 行走次数11 121+1 / 2 231+1+1/1+2/2+1 34原创 2020-05-15 00:59:33 · 508 阅读 · 0 评论 -
C++中const关键字的应用,简单、易懂、实用!
文章稍长,但是举例都很易懂。1. 常量c++用const将对象i定义为一个常量。定义之后,i的值就不可以再变了,所以i必须在定义时候被初始化。所以 const int i; //错误的,i 必须被初始化 (在C中这种写法可以,但是这里只说C++的环境下)#include<iostream>int main(){ const int i = 10; //正确,i被初始化}2. 代替#define的值替换功能举例:#define NUMBER 100上面这行代码是原创 2020-05-12 23:24:46 · 259 阅读 · 0 评论 -
C++命令行参数的实现方法及使用方法,代码详细,执行正确。
执行程序时,经常会用到命令行参数传递参数这种方式,今天实战一个命令行参数的从头到尾。先写个主函数#include<iostream>int main(const int argc, const char* argv[]) //argc和argv的类型不一样,{ try{ const auto po = translateParams(argc,argv); //解析函数。先写这,等会在声明实现。 }}接下来写解析函数记录一下program options的用法原创 2020-05-11 20:42:13 · 6050 阅读 · 0 评论 -
C++实现简单的二分法查找/折半查找
二分法又叫折半查找。不断地折半长度知道找到要找的值使用场景:适用于已经排好序的顺序表。#include<iostream>int binarySearch(int* a, int low, int high, const int key){ while(low <= high) { //mid可以定义在while外面,while每次循环相当于不断地给mid进行赋值操作,但我还是喜欢不断的进行初始化操作。 int mid = (low + high) / 2;原创 2020-05-10 17:45:03 · 578 阅读 · 0 评论 -
C++中concurrency::task的简单实战使用
2020年五一放了5天,再休了两天假,回家呆了七天。十来天没写博客了,虽然有罪恶感,但是回家真的是游子最快乐的时光。今天简简单单实战应用下concurrency::task。#include<iostream>#include <pplwin.h> //头文件包含#include <ppltasks.h>typedef std::vector<std::shared_ptr<osg::Node>> sharedNodeVec;vo原创 2020-05-10 16:29:58 · 1000 阅读 · 0 评论 -
C++实现经典冒泡排序以及冒泡排序的优化
直接码,边思考边写。排序入门之——冒泡排序#include<iostream>void swap(int* a, int* b){ int c = *a; *a = *b; *b = c;}int main(){ int a[10]={12, 23, 3, 14, 5, 6, 17, 8, 39, 11}; for(int i = 0; i < s...原创 2020-04-28 23:22:54 · 724 阅读 · 0 评论 -
Mongoose库的使用方法、网络编程
概述Mongoose库是一组用C语言实现的网络库。支持平台:linux、windows、Android、IOS等原理(只算是一些基本的把)方法:1.mg_mgr:mg_mgr是整个mongoose库信息存储的结构体,使用时一般有且仅有一个对象,负责管理和维护连接的对象。#include<iostream>struct mg_mgr{ struct mg_con...原创 2020-04-28 21:58:31 · 2167 阅读 · 0 评论 -
C++创建一个临时数据库文件,SQLite应用
工作中用到的数据库类型为Oracle和Sql Server.还有SqlLite这种轻型数据库。#include<iostream>#include<boost/filesystem.hpp>//包含boost的nuget包#include<SQLiteCpp/Database.h>//前提是含有sqlite相关的nuget包#include<boo...原创 2020-04-27 22:14:52 · 822 阅读 · 0 评论 -
C++判断一棵树是不是平衡二叉树(AVL树)
首先要知道什么是平衡二叉树。节点左子树和右子树的高度差不超过1的数叫平衡二叉树。应用场景:1.为了避免树的高度增长过快而影响二叉排序树的性能树的高度:从根节点到叶子节点依次经过的节点形成的路径,最长路径的长度值为树的高度。#include<iostream>int getTreeHeight(BiTree* tree);//声明获取树高度的函数//先写一个树...原创 2020-04-26 23:11:02 · 968 阅读 · 0 评论 -
C++实现二叉树后序遍历
二叉树的后续遍历,是先遍历左子树,在遍历右子数,最后遍历根节点。后续遍历的过程中我们需要借助栈来辅助#include<iostream>#include<stack>//先构建一个二叉树结构体struct BTreeNode{ int data; BTreeNode* lchild; BTreeNode* rchild;}void postOr...原创 2020-04-26 21:45:18 · 2320 阅读 · 0 评论 -
mongoose上传文件过程解析
简单记录使用mongoose上传文件的使用过程。查看mongoose源码,源码中有默认的处理方式,先看默认处理方式吧。 * void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { * switch (ev) { * case MG_EV_HTTP_MULTIPART_REQUEST: * {...原创 2020-04-25 18:26:03 · 2188 阅读 · 1 评论 -
osg图片优化手段,dds图片格式,Mipmap技术。
今天北京有沙尘。我感觉疫情下的天空,格外的苍凉。不过,还是不能中断我更新博客。今天简简单单写个osg渲染中常用到的图片优化手段。当然,这样得记录一些知识:模型贴图使用dds+mipmap的方式加载时间和显存占用时间明显降低。dds格式:DDS是一种图片格式。DirectDraw Surface的缩写,它是DirectX纹理压缩(DirectX Texture Compression,简...原创 2020-04-24 23:59:18 · 1930 阅读 · 0 评论 -
C++用栈实现队列功能(push,pop,top,empty)
之前已经了解过了栈和队列的特性,再温习一下栈:先进后出,后进先出。队列:先进先出,后进后出。好,直接边思考边写代码#include<iostream>#include<stack>//先构建一个队列的类class MyQueue{public: void push(int data) //push要解决的问题就是:将栈操作中 后push进去的元素...原创 2020-04-22 23:20:55 · 1722 阅读 · 0 评论 -
C++用队列实现栈功能(push,pop,top,empty)
首先分析一下队列和栈的特点队列:先进先出,后进后出。栈:先进后出、后进先出。知道特性后,我们边思考边写。#include<iostream>//先声明一个栈类class Stack{public: void push(int data); int pop(); int top(); bool empty(); private: queue<int&...原创 2020-04-22 22:49:09 · 1298 阅读 · 0 评论 -
C++最基础的string类
string类也是当年我校招的时候很多公司的笔试必出题,话不多说,直接上代码。#include<iostream>using namespace std;//直接声明类。class String{public: String(const char* str); //默认构造 String(const String& str); //拷贝构造,参数为引用 ...原创 2020-04-21 23:10:11 · 241 阅读 · 0 评论 -
C++多线程编程,最简单,最直接,最好学。
直接干货:#include<iostream>#include<windows.h>int main(){ while(1) { std::cout<<"main!"<<std::endl; //该程序无限打印 main! Sleep(1000); //不要忘记包含头文件windows } std::c...原创 2020-04-21 20:15:53 · 990 阅读 · 2 评论 -
C++对文件内容去重(最详细,最简单)
力求最详细,最简单,最便捷。代码执行前后效果说明:代码:#include<iostream>using namespace boost::filesystem;void main(){ const char* path = "G:\\old.txt"; //要去重的文件path ifstream infile; //读旧文件(old.txt) infile....原创 2020-04-21 13:24:32 · 1605 阅读 · 0 评论 -
C++面试时static关键字总结
在类中使用和非类中非类中:隐藏举例:一个a.cpp文件,一个b.cpp文件。这个是a.cpp的内容:#include<iostream>int g_a = 1;void fun(){}这个a.cpp中的变量g_a和函数fun在b.cpp中是可以访问且使用的。加static后就对其他源文件(a.cpp之外的)隐藏了。默认初始化为0备注:未初始化的全局静...原创 2020-04-20 20:53:25 · 238 阅读 · 0 评论 -
C++用boost库操作a目录下文件改名生成到b目录下
const boost::filesystem::path& OgfDir = “G:\wushuaijun\SimplifyModel\OgfModel\zheshihua\source\ogf”; boost::filesystem::directory_iterator end_iter; boost::filesystem::directory_iterator iter(O...原创 2020-04-18 16:02:11 · 666 阅读 · 1 评论
分享