C/C++
郝伟博士
郝伟,男,留日计算机博士,副研究员,硕士生导师。师从东京大学松崎公纪教授,主要研究方向为网络安全、并行计算与大数据,尤其是在网络环境下大数据安全性的研究。北京华云安信息技术有限公司首席研究员,中新网安技术研究员,上海莱镁晟信息科技有限公司技术顾问。参与国家973项目和国家科技重大专项各1项,主持国家科研项目1项,13项国家发明专利,各类论文25篇,合肥市政认定高层次人才。与清华大学、海克斯康、国防科技大学等多家单位有技术合作。
展开
-
在C++中计算经纬度(附34个城市两两间的距离计算结果)
文章目录计算说明C++实现代码计算结果计算说明本文使用C++根据输出两个城市的经纬度计算两地间的距离。几点说明:经度为E,如果开头为W则取负值;纬度为N,如果开头为S则取负值;结果单位为公里C++实现代码#include <iostream>#include "math.h"#include <vector>using namespace std;double getDistance(double lat1, double long1, double原创 2020-08-25 16:12:48 · 2391 阅读 · 0 评论 -
一道C++算法题:将纳秒数转化为日期时间
2020/07/11 void initilize(long long time) { int seconds = time / 1000000000; int nanoseconds = time % 1000000000; int days = seconds / 86400; year = 1970 + (int)(days / 1461) * 4; day = days % 1461; day = day > 730 ? day - 1 : day;原创 2020-08-19 07:35:44 · 1996 阅读 · 0 评论 -
使用C++对小文本文件进行整体读写的两个函数
#include <iostream>#include <fstream>#include <string>#include <chrono>#include <thread>using namespace std;using namespace std::chrono;static void writeAllText(const string &content, const string &filename)原创 2020-08-17 07:32:34 · 461 阅读 · 0 评论 -
一个C++的随机类
#ifndef HELLOWORLD_CRAND_H#define HELLOWORLD_CRAND_H#include <random>#include <iostream>#include <time.h>using namespace std;class crand{public: static unsigned int randInt(int range){ static mt19937 r(time(0)); .原创 2020-08-09 10:13:52 · 269 阅读 · 0 评论 -
同样的C++代码在VS和MingGW中得到不同的性能结果
*************** 使用不同的环境结果不一样 测试代码:vector 1billion speed test.txt使用VStime = 1150 ms, sum = 178329366400time = 825 ms, sum = 178329366400time = 285 ms, sum = 178329366400time = 295 ms, sum = 178329366400time = 186 ms, sum = 178329366400使用MingGWtime原创 2020-08-08 09:55:22 · 378 阅读 · 0 评论 -
从一个简单的异常理解栈的大小
问题以下三行代码看似简单,但是Windows上使用VS编译时,发现vs2报错了。int vs1[1000000]; // 执行失败int vs2[100000]; // 执行成功int *vs3 = new int[1000000]; // 执行成功解答这个简单的问题,实际上涉及以下几个知识点:直接定义的变量在存储在栈上的;Windows系统下默认栈大小是1M,而Linux系统下默认栈大小是10M;使用new建立的对象是保存在堆上的;堆的大小理论上只受限于内存。早期物理内存有多大堆就原创 2020-08-06 12:26:05 · 315 阅读 · 0 评论 -
一个自定义的C++线程安全的对象模板
简介在多线程操作中,为了避免对线程共享数据的操作冲突,一般会使用互斥锁,如 mutex。为了让结构更加合理,在本文中,作者利用模板,定义了一个通用的线程间操作安全的模板对象类。原理基本原理是使用模板支持不同的数据类型,然后在模板类中通过一个互斥锁,实现加锁和解锁操作,从而避免数据在多线程操作中的冲突。具体实现代码如下所示:// LockableObject.h#include <mutex> template <typename T>class LockableObj原创 2020-08-06 12:08:15 · 344 阅读 · 0 评论 -
C++11中的原子操作的性能测试
目录测试内容测试结果结论附:测试代码测试内容本测试的主要目的就是了解C++中的原子操作的性能。测试原理就是使用100个线程运行以下的这个函数,然后统计用时,并显示。多线程中的调用函数process操作非常简单,只是对 sum 进行一百万次的累加。所以总运行次数为1亿次,即1亿次循环、累加和加解锁。long sum = 0;mutex m;void process() { for (int i = 0, len = 1000 * 1000; i < len; ++i) {原创 2020-07-29 08:51:43 · 867 阅读 · 0 评论 -
C++中的右移位操作符比乘法要快多少?
前言都说C++中的右移(或左移)要比乘法(或除法)快,但是到底快多少呢,在网上并没有找到合适的答案,于是就自己测试了一下。测试原理生成一个长度为1M的字符串,然后每4个一组组成一个整型,计算公式是:data[i + 3] * 16777216 + data[i + 2] * 65536 + data[i * 4 + 1] * 256 + data[i * 4];或者使用位移操作:(data[i + 3] << 24) + (data[i + 2] << 16) +原创 2020-07-27 18:59:54 · 1108 阅读 · 0 评论 -
如何在C++的函数中直接生成一个对象
前言在C++中,使用一个变量,我们都需要先定义,然后再进行调用传递。每次都需要写两行,比如:Type t;process(t);那么是否可以写在一行呢?答案显然是可以的,我们可以有以下几个办法。方法1: 使用指针process(new Type())方法2: 自定义函数class Type{public: static Type New(){ Type t; return t; }}process(Type::New())方法3: 通用变量除此之外 ,我们还可以定原创 2020-07-23 16:00:34 · 442 阅读 · 0 评论 -
CLion使用remote host在本地进行远程Linux程序调试
1 配置SSH连接首先,要配置SSH连接,过程如下所示。配置好SSH连接以后,测试一下是否可以连接,如果是第一次连接,会有是否连接的确认提示。如果一切正常会弹出连接成功的提示。2 配置 Remote Host如下图所示,在 + 处点击,选择 Remote Host。添加相关内容,完成以后再把Remote Hosting提升到第1位,表示用此配置编译运行程序。注意,如果有提示版本不合适,可以选择升级,也可以直接无视。注意:有时候cmake版本过低会导致无法运行,可以参见以下更新的文原创 2020-07-20 12:13:39 · 10579 阅读 · 3 评论 -
在Ubuntu16及以上版本安装配置C++11的编译环境
安装过程首先,确认是否已经安装环境:输入 gcc --version,只可以 看到以下信息:(base) root@instance-h9yr0vu1:~# gcc --versiongcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609Copyright (C) 2015 Free Software Foundation, Inc.This is free software; see the source for copying condition原创 2020-07-19 11:59:40 · 4278 阅读 · 0 评论 -
使用不同数据类型对C++map的性能进行测试
文章目录1 测试内容2 测试环境3 主要结论4 核心代码5 原始数据1 测试内容在包转发的过程中,需要对IP地址进行一个映射,这里如何对包的格式进行定义,非常重要,直接影响转发性能,所以本测试测试几种常用的数据类型对map性能的影响。2 测试环境使用 i7 9750H,32GB内存,假定每包200字节,只使用单核。3 主要结论根据测试的原始数据分析,可以发现使用 int 作为key速度最快,可以达到每秒470MB左右的映射速度。其他类型速度如下:使用String,格式为 “192.168.1原创 2020-07-17 09:54:05 · 901 阅读 · 0 评论 -
使用C++编写的一个通用的测试函数
void timing(const string &testname, int (*p)(void)) { cout << "----------------- " << testname << " -----------------" << endl; auto start = std::chrono::high_resolution_clock::now(); int size = p(); auto end = s原创 2020-07-16 23:47:33 · 1081 阅读 · 0 评论 -
一个由于this指针引起的typeid()在继承时只显示基类名称的奇怪问题
问题描述先看代码#include <iostream>#include <string>using namespace std;class A{public: virtual string toString() { return typeid(this).name(); } friend ostream& operator <<(ostream& out, A& obj){ ou原创 2020-07-15 17:41:22 · 651 阅读 · 0 评论 -
C++的数组指针和二维数据测试
前言为了理解C++的数组指针和二维数组,笔者编写了一个简易的测试程序(见文末),测试结果如下:---------------- declaration -----------------char arr1[3];char arr2[3][2];char *p1 = arr1;char(*p2)[2] = arr2;---------------- p1 -----------------arr1 = 006FF784p1 = 006FF784&arr1[0] = 006FF784原创 2020-07-15 08:19:20 · 231 阅读 · 0 评论 -
C++多线程操作(一):简单的多线程
本系列将对C++的多线程操作进行详细介绍。本文主要介绍最简单的C++多线程,在这个示例中,我们将开启一个线程,同时运行两个函数。在这个示例中,只调用了一个函数。这个函数返回类型不限制,但是不能有参数。主要代码如下所示。#include <iostream>#include <string>#include <vector>#include <chrono>#include <thread>#include <future>原创 2020-07-14 20:13:10 · 780 阅读 · 0 评论 -
通过一个看似奇怪的问题理解C++的函数变量引用机制
问题描述写了一个C++函数用于从文本文件中读取所有的行,代码如下:#include <iostream>#include <fstream>#include <string>#include <vector> using namespace std; vector<string> &readLines(const string &filename) { vector<string> lines;原创 2020-07-14 16:01:40 · 214 阅读 · 0 评论 -
在一个CLion项目中设置多个main函数以方便调试
在Java中,我们可以在每一个类中写main函数,从而方便对单个类进行简单的测试。在C++中,当我们使用CLion环境时,可以实现同样的目的。本文就简介如何设计以实现本目标。原创 2020-07-14 10:02:28 · 4227 阅读 · 0 评论 -
C++函数的参数类型中为什么要加const
简介const 是用于对常量的修改,带有const的引用可以称之为常量引用。但是在函数中为什么要添加这个呢,比如 void fun(string&) 和 void fun(const string&) 到底有什么区别呢,本文就些问题进行简单介绍。1. 可以同时接受常量参数和变量参数给定给以下两个函数:void fun1(string& s){ cout << s << endl; }void fun2(const string& s){ co原创 2020-07-13 20:56:40 · 6634 阅读 · 0 评论 -
C++字符串拼接性能测试
测试说明本文对C++字符串拼接操作的四种运行:+=、append、stringstream、sprintf 进行简单的性能测试,测试方法比较方法是写了4个函数,分别用+=、append、stringstream、sprintf的方式来拼接字符串,拼接方法是将 s1=“abcedfg”,s2=“hijklmn”,s3="opqrst"三个字符串拼接到一起,总共循环60次。然后在main函数中依次调用这4 个函数,并打时间戳来计时。为了使时间差异更明显,可以取循环N(N可以为100或是1000000等)次原创 2020-11-01 14:51:46 · 1465 阅读 · 0 评论 -
在C++中利用正则表达式简单高效提高多个匹配字符串
问题现有字符串 s = "ID={0:2d}, Name={1}, Folder = {3}{4}, Time: {2} ms.";,现在需要把花括号中的内容提出来,即返回结果为字符串数组 ["0:2d", "1", "3", "4", "2"],如何写代码最容易实现?回答使用正则表达式,使用模式为:"\\{(.+?)\\}",这里需要注意几点:花括号需要两个双斜杠进行转义。加上小括号的内容可以单独提取在C++中,使用 sregex_iterator 类进行提取,在返回的结果中 pos-&g原创 2020-07-10 11:56:17 · 2791 阅读 · 3 评论 -
C++字符串拆分与时间格式化函数两个实现
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#pragma warning(disable:4996);#include <iostream>#include <vector> #include <string> #include <fstream> #include <iomanip>#include <stdio.h>#include原创 2020-07-08 08:52:28 · 579 阅读 · 0 评论 -
什么是代码,源文件、编辑和编译?
在给本科一二年级的学生教学C语言时,发现有不少同学由于使用计算机少或缺少基本理论的教学,对这程序设计中的很多基本概念并不了解,比如一些基本的文件和后缀名的概念都不清楚,给C语言的实践带来了很多麻烦。所以本文就程序设计的一些相关的基本概念进行简要介绍。原创 2020-04-09 08:53:17 · 33819 阅读 · 0 评论 -
为初学者收集的一些C语言学习资料
本文是一个C语言的资源整合文章,包括了关于C语言的方方面面的内容。原创 2020-04-02 08:34:00 · 650 阅读 · 0 评论 -
C语言程序设计授课记录202003
课程基本信息学期:2019-2020学年第二学期 序号:10917.21名称:C语言程序设计 教师:郝伟时间:星期三 5-6周次:1-16教室:天工北107 041107备注:受疫情影响,初始几周实行在线教育。2020/02/26 第一章 C语言入门本次教学采用在线教育,使用软件为QQ群。【课程内容...原创 2020-02-27 09:05:46 · 2037 阅读 · 0 评论 -
手工配置基于MinGW64的C语言编译环境
1 下载MinGW以下自动点开以后5秒会自动开始下载:MinGW下载地址。2 解压并将文件复制至 C:\Program Files\mingw64 目录下注意:在这个目录应该有以下内容(个别文件夹若不一样没关系,可能是版本不同):3 配置环境变量在桌面上右键我的电脑,选择属性。然后按下面的截图在⑥处添加 C:\Program Files\mingw64\bin。4 测试新建一个测...原创 2020-02-26 09:37:23 · 2360 阅读 · 0 评论