C++
文章平均质量分 80
千瞱
世界上没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。
展开
-
C++学习笔记之string流
在秋招找工作的笔试题中,有很多涉及到自己处理输入输出的编程题目,举一个简单的例子:现在需要编程录入一个电话簿,一个人可能同时有多个电话,确保每个人的名字不相同,请编程完成电话簿的录入工作.输入:morgan 201509321 862550123drew 97355231lee 60342787 8323130001 23232111这里有一个什么问题呢?在输入的时候没有指定有多少条记录,因此用传统的cin保存数据就会有问题.这时候getline和stringstream就可以大原创 2020-09-23 22:02:13 · 593 阅读 · 0 评论 -
C++11 bind和function总结
C++11提供了lambda表达式,bind和function,如果想要在程序中使用bind和function需要引入头文件functional,下面简要的介绍一下这几个利器.举个栗子看看他们都是怎么使用的:#include <iostream>#include <functional>#include <string>using namespace std;class Base { public: Base() = delete;原创 2020-09-21 16:15:08 · 946 阅读 · 0 评论 -
openmpi入门1-安装与测试
1 安装openmpi1 前置环境安装安装openmpi前需要安装一些编译器,确保你已经安装了如下工具:gcc,g++,python。可以使用下面的命令测试gcc --versiong++ --versionpython --version如果出现了版本号则说明已经安装了对应的环境。如果缺少对应的环境,在ubuntu环境下使用apt-get安装即可sudo apt-get install g++如果使用ubuntu默认的源可能会出现下面的问题这时候换一个源应该就能够解决,如使用科大原创 2020-08-11 15:43:42 · 27777 阅读 · 21 评论 -
单例模式一网打尽(C++版本)
1 什么是单例模式单例模式简单的来说就是:一个类只能有一个实例。2 C++如何实现一个单例模式呢?下面的代码就能够实现一个单例模式了~, 要点:定义构造函数为私有的 定义一个私有的static的类对象指针 定义给一个公有的static函数getInstance获取唯一一个实例化对象class Singleton {private: Singleton() {...原创 2020-04-05 13:54:13 · 272 阅读 · 0 评论 -
C++知识点之namespace
1 命名空间的基本概念由于不同的库可能会存在相同名称的函数,这在C的全局作用域中可能发生冲突,因此在C++中引入命名空间的概念。本质上命名空间定义了一个范围,将全局作用域划分为多个命名空间,有如下特点:不同命名空间中的标识符可以同名而不会发生冲突 命名空间可以发生嵌套 全局作用域也叫默认命名空间2 命名空间使用方式C++中命名空间使用方式有三种:使用整个命名空间:usi...原创 2020-04-03 13:37:09 · 335 阅读 · 1 评论 -
C++中new、operator new和placement new的区别
参考博文:http://www.codeceo.com/article/cpp-new-keyword.htmlhttps://blog.csdn.net/zhangxinrun/article/details/5940019 new和delete是C++中的表达式,用于创建一个新的对象。它们是对堆中的内存进行申请和释放,而且这两个都是不能被重载的。要实现不同的内存分配行为,需要...原创 2018-07-26 14:37:23 · 5237 阅读 · 7 评论 -
C++中的new/delete和C中的malloc/free相比有什么区别?
malloc和free,是C语言/C++中的标准库函数,new/delete是C++的运算符。都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,单单使用malloc和free无法满足需求,因为在C++中的new执行的时候,不仅分配了内存空间,还执行了构造函数,同样的delete执行的时候不仅释放了空间还执行了析构函数。由于malloc/free是库函数不是运算符,不在编译器控制范围之内...原创 2018-07-26 10:25:16 · 542 阅读 · 0 评论 -
C/C++常用头文件及其函数汇总(持续更新)
stdio.h编号 函数原型 函数使用说明 备注 1 size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); 向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。 写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file poi...原创 2018-07-26 09:49:33 · 6144 阅读 · 1 评论 -
C/C++程序编译过程
我们写好一个c文件或者c屁屁文件,然后在IDE中按一下编辑按钮之后,如果没有报错,那么我们写的程序便转变成了可执行文件(windows下的exe文件)。中间经历了什么嘞?如下图所示: 十分清楚明了了吧?从c程序到可执行程序之间的过程还是十分复杂的,要完整的弄清楚这中间的四个阶段需要掌握基本的编译原理知识和汇编指令(翻译)基本内容。下面简要的介绍一下四个阶段的基本工作内容。1.预处理阶...原创 2018-07-14 19:25:50 · 227 阅读 · 0 评论 -
C/ C++命名规则总结
编程的过程中,使用合适的命名规则能让你的程序可读性有很大的提升。在阅读代码的过程中最害怕看到这样的:int kk ,ml, st;int i, j ,k ,m ,n;kk = 0;ml = 10;st = (kk + ml ) / 2for(i = 0; i < 8; i++) { if(kk < st) { ... }}这样的代码是...原创 2018-07-13 12:22:39 · 837 阅读 · 0 评论 -
STL 空间配置器篇
如果你不曾仔细研读STL源码,你是不会发现在STL还会有空间配置器的存在的,因为它是隐藏在一切组件(特别是容器)的背后,默默工作。如果你需要自己实现一个STL,最先设计的就应该是空间配置器,因为它是一切STL的基础。零、为何STL要单独设计空间配置器?一开始我有过这样的疑惑:为什么STL不直接使用malloc和free操纵内存即可,为什么还要设计空间配置器呢?这不是多此一举吗?后来在学...原创 2018-10-01 11:50:22 · 2551 阅读 · 1 评论 -
STL 序列式容器篇(未完成)
STL中的容器可以分为序列式容器和关联式容器。序列式容器指其中的元素都可序,但未必有序。在STL中提供了vector, list, deque, stack, queue, priority_queue等等序列式容器。其中stack和queue是由deque改头换面而成。本篇介绍STL中序列式容器的设计和使用方式。 一、vector欲使用vector需要包含头文件: #inc...原创 2018-10-01 16:34:24 · 248 阅读 · 0 评论 -
C++11 并发与多线程篇(未完成)
从C++11新标准开始,C++语言本身增加了对多线程的支持,意味着使用C++可实现多线程程序的可移植,跨平台。在标准的C++程序中,主线程从main()开始执行,我们自己在C++中创建的线程,也需要从一个函数开始执行(这个函数叫做初始函数),一旦这个函数运行完毕,我们创建的线程也就执行结束了。一个书写良好的程序,必须等所有的子线程执行完毕之后,主线程才能结束。一、C++11创建线程...原创 2018-10-13 20:14:19 · 1178 阅读 · 0 评论 -
C++11/14学习笔记(未完成)
本篇内容为侯捷《C++ 11》听课笔记,只讨论在C++中出现的新内容。0、准备工作0.1、C++ Standard演化C++版本 版本名称 说明 C++ 98 1.0 C++ 03 TR1, Technical Report 1 许多TR1的特性存在std::tr1中,现在TR1的内容已经被放到STD中,因此现在在std命名空间中...原创 2018-10-13 20:13:55 · 318 阅读 · 0 评论 -
C和C++中结构体的区别
C++中结构体和类基本完全类似!C++中结构体能继承、能实现多态!结构体中也可以包含构造函数和析构函数和其他内部成员函数,因此结构体和类基本雷同!唯一的区别是,类中的成员变量默认为私有,而结构体中则为公有。虽然二者基本毫无区别,struct更适合作为数据结构的实现体,class更适合作为对象的实现体。一、补充点基础知识1.1 结构体赋值问题1.在C中给结构体赋值struc...原创 2018-09-29 21:24:09 · 5002 阅读 · 4 评论 -
C++多态篇
面向对象三大特征有:封装、继承和多态,本篇为多态篇。多态:相同对象收到不同消息或者不同对象收到相同消息有不同的操作。多态可分为静态多态和动态多态。静态多态:同一个方法接受不同的参数会有不同的操作(输出)。动态多态:基于继承和封装,不同类的对象对于相同的输入有不同的操作(输出)。1、虚函数与虚函数表先给出一个例子抛个砖引个玉,我们想实现一个基本的面向对象问题:定义一个形状基类...原创 2018-10-10 20:53:16 · 313 阅读 · 0 评论 -
STL algorithm学习笔记
本篇主要总结在C++标准库algorithm头文件下的函数的使用方法1 lower_bound和upper_bound(应用于有序区间)template <class ForwardIterator, class T>inline ForwardIterator lower_bound(ForwardIterator first, ForwardIterator las...原创 2019-04-14 17:50:42 · 398 阅读 · 0 评论 -
STL容器篇:set
1 认识set和multisetset名为集合,顾名思义只有键值,而不像map那样既有键值(key)又有实值(value)。而且STL中的set有个特性是所有的元素都会根据元素的键值自动被排序。由于RB-tree是一种平衡二叉树,自动排序的效果很不错,因此标准的STL set以RB-tree作为底层机制。我们可以通过set的迭代器修改set元素的值么?不行!因为set元素值就是其...原创 2019-04-14 18:04:28 · 347 阅读 · 0 评论 -
C++中构造函数的两种写法
对于一个C++刚入门的小盆友来说,构造函数怎么写还不简单么?然而C++中构造函数的写法不止一种,而且从效果和性能上来说并不相同。先看两种构造函数的写法,找到其区别。写法一(我赌一包辣条很多人没见过这种写法):#include <iostream>using namespace std;template <typename Type>class test...原创 2018-07-12 21:31:04 · 31146 阅读 · 12 评论 -
深入辨析C++中的static和const
const和static在C++中经常被使用到。简单地说:const定义一个类实例化范围内的常量,而static定义的是类的静态成员变量是由一个类的所有实例对象共享的。 再仔细说明一下: const成员变量不能在类的内部初始化,一般地是在构造函数中初始化(因此若有const成员变量,必须有显式构造函数)。 static类静态成员变量同样不能在类的内部初始化,静态成员变量是...原创 2018-07-12 20:22:11 · 533 阅读 · 1 评论 -
输入10个数求每个不同的数出现的次数算法
输入10个数求每个不同数出现的次数原创 2017-08-18 18:37:46 · 1952 阅读 · 0 评论 -
数据结构之单链表的C语言实现
使用C语言实现的单链表基本功能。通过动态分配内存的方式实现了单链表原创 2017-08-22 22:40:00 · 684 阅读 · 0 评论 -
数据结构之双链表的C语言实现
在写过单链表之后再来写双链表会发现,双链表和单链表在实现上的主要区别在于:双链表每个节点需要考虑她的前驱和后继,因此在插入和删除操作的时候就需要格外注意对链表最后一个元素的操作,因为最后一个元素的next指向的是NULL,所以在写插入和删除操作的时候需要判断是不是对最后一个节点操作。原创 2017-08-24 22:24:13 · 439 阅读 · 0 评论 -
数据结构之二叉树的建立与遍历(C语言版)
只实现了二叉树的先序方式建立和三种遍历方法。原创 2017-08-26 13:01:34 · 1684 阅读 · 0 评论 -
合并两升序数组称为一个升序数组算法
这个算法时间复杂度为O(maxO(max{m,n})})/**测试A,B两升序数列,合并为C的最优时间复杂度算法 */#include <iostream>#include <stdlib.h>using namespace std;typedef int ElemType;typedef struct NewArr{ ElemType *data; int length;原创 2017-09-27 22:12:12 · 3366 阅读 · 0 评论 -
C++中STL中map的使用方法
在编程的过程中常常会需要存储一组数据(比如json中的键值一一对应的数据集),如果要使用原生的方法,可以定义一个结构体或者类然后添加相应的方法来实现。但在C++的Standard Template Libray中定义了Map这样一种数据结构,可以方便我们使用。 下面对STL中的map类进行介绍。 Map是STL中一对一的关联容器,其中第一个称为键,Map中的键是独一无二的(类似...原创 2018-02-26 15:07:25 · 958 阅读 · 0 评论 -
cin.peek()的用法
cin.peek()函数说明说明: cin.peek()的返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测指针停留在当前位置并不后移。举个栗子:#include <iostream>#include <string>using namespace std;int main(){ cout<<"Enter a Word o...原创 2018-02-26 16:05:28 · 8388 阅读 · 1 评论 -
浅谈C语言中生成随机数的方法
使用rand()和srand()函数,利用时间作为随机数种子//使用到的头文件:stdlib.h 和 time.hsrand((unsigned)time(NULL));int randSeed = rand()%8;方法分析:这种方法是将当前系统的时间作为输入,通过换算输出一个对应的值。因此缺点比较明显,如果在程序中需要多次使用随机数,而且时间间隔较短,产生的随机数会是相同的值。在循环程序中...原创 2018-02-23 16:27:47 · 564 阅读 · 0 评论 -
typedef的使用
1.最简单的用法 typedef是为每个类型声明一个新的名字(标识符),而不是一个类型的对象。例如typedef int INT_32;typedef short INT_16;typedef unsigned char UCHAR;2.在定义结构体时也可以使用typedef struct Example{ char *name; struct Example *next...原创 2018-03-16 16:31:16 · 273 阅读 · 0 评论 -
TSP(货郎担问题)解决方案:遗传算法求解近似最优解
一、 实验题目 有 n 个城市,用 1,2,…,n 表示,城 i,j 之间的距离为 dij,有一个货郎从城 1 出发到其他城市一次且仅一次,最后回到城市 1,怎样选择行走路线使总路程最短?二、 题目分析 在开始这个实验题目之前,我查找过很多这方面的资料,货郎担问题(TSP 问题)是一个组合优化问题。该问题可以被证明具有 NPC 计算复杂性。因此,单纯的从以往通过数据结构的方法解决这个问题是不现实的...原创 2018-03-16 16:47:22 · 9105 阅读 · 0 评论 -
在STL中如何使用C++文件操作(入门级)
1.需要的头文件:<fstream>2.文件标识介绍打开文件需要使用文件标识符(文件模式或者常量)来说明文件的使用方式。常用的有:ios_base::binary 以二进制形式打开文件ios_base::trunc 打开文件,先将先前的内容删除ios_base::app 打开文件,写入时始终从尾部添加ios_base::ate 打开...原创 2018-03-16 18:55:33 · 1876 阅读 · 0 评论 -
自动生成文件名的tmpname()函数介绍
函数原型:char *tmpnam(char *pszname); tmpname()函数一个临时文件名,将它放在pszname指向的C风格字符串中,常量L_tmpnam 和TMP_MAX限制了文件名包含的字符数,以及在确保当前目录中不生成重复文件名的情况下,tmpname()可以被调用的最多次数。 函数用例如下:#include <iostream>using name...原创 2018-03-16 19:07:41 · 2277 阅读 · 0 评论 -
用邻接表建立图
#include <iostream>#include <stdlib.h>using namespace std;#define MaxVertexNum 100typedef int VertexType;typedef int EdgeType;//邻接矩阵表示 typedef struct MGraph{VertexType Vex[Max...原创 2018-03-19 22:27:53 · 994 阅读 · 0 评论 -
数据结构之二叉树的所有遍历算法C++实现(递归和非递归)
定义头文件:BinTree.h#pragma once#include <iostream>#include <vector>#include <queue>#include <stack>using namespace std;template <class NodeType>struct TreeNode {...原创 2018-06-06 17:27:48 · 1715 阅读 · 0 评论 -
C++ Templates之函数模板
在《C++ Templates》书中有这样的代码片段:#include <iostream>using namespace std;template <typename T>inline T const &max(T const &a, T const &b){ return a > b ? a : b;}int mai...原创 2018-07-16 18:11:29 · 340 阅读 · 0 评论 -
C++ Templates之类模板
在《C++ Templates》第三章介绍类模板的概念,并借助vector实现Stack类模板。实现代码如下:#include <iostream>#include <vector>#include <stdexcept>using namespace std;template <typename T>class Stack {p...原创 2018-07-17 09:30:24 · 402 阅读 · 0 评论 -
C++标准输入输出流_seekg函数详解
对文件输入输出流的操作函数主要有1/seekg()和tellg() //对输入流的操作(也就是读)2/seekp()和tellp() //对输出流的操作(也就是写) 1.seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是: ios::beg原创 2016-06-30 15:04:35 · 2367 阅读 · 0 评论