Boost C++ 库(Libraries)是一组扩充C++功能性的经过同行评审(Peer-reviewed)且开放源代码程序库。...许多Boost的开发人员是来自C++标准委员会,而部份的Boost库成为C++的TR1标准之一。[1] 为了要确保库的效率与弹性,Boost广泛的使用模板(template)功能。...而它是针对各式领域的C++用户与应用领域(Application Domain)上,包含的库类从像smart_ptr 库这种类通用库,到像是文件系统的操作系统抽象层,甚至能够利用Boost来开发额外的库或是给高级的...C++用户利用,像是MPL。...参考资料: 1、Boost C++ Libraries 2、Get Started with Boost 3、Boost 1.39 编译安装手记
我厂很多同学使用VC在windows上编写linux的C/C++程序,然后再传的开发服务器上,然后再编译和调试。如果有修改,可能会直接用vi去改了,然后再把源代码同步回来。其实这样做挺折腾的。...也有大神全盘vim设置emacs写,想来也是极好的。 但是,也有另外一个方案,就是在 Linux上安装个写C/C++程序的IDE,这样可以直接编写、编译、运行、上传SVN,非常方便。...其实要做到这点,也很简单: 你需要一个虚拟机来运行一个带GUI的LINUX,这样IDE才能运行起来,当然也可以直接在开发服务器上安装GUI程序,然后WINDOWS的办公PC这里设置个SSH的X转发,装个...注意Eclipse有很多个包,如果只写C/C++程序,就直接下Eclipse CDT这个套件好了,省了还要下支持JAVA开发的东西。 ?...Theme,选择一个喜欢的颜色方案 如果你使用gtest来做单元测试,可以装个“C/C++ Unit Testing Support“,这样就可以直接在IDE里面运行和调试单元测试了。
以前开发 Linux 服务器的程序,会有通过 samba 进行文件保存,或者先在 windows 上编译测试,然后传到 Linux 服务器重新编译测试。这些都不太直接,而且调试起来比较困难。...现在很多 IDE 都支持直接编写 LINUX 上的程序了,本文介绍 VSCode 如何完成这个工作。...配置连接到 LINUX 服务器上,点击“远程资源管理器”,然后选 SSH TARGERTS 的“+”号,输入一行 ssh 命令,就会打开一个登录配置文件,你可以自己编辑多个需要登录的主机 ?...选择已经配置好的服务器右边的“打开”按钮,会连接到远程服务器上,并且自动在LINUX服务器上安装一些 VS CODE 所需要的软件,这需要你的远程服务器可以连接到公网上 ?...在远程服务器上安装 C++ 相关插件: C/C++ C++Intellisense ?
C++语言是在C语言的基础上发展而来,同时它又支持面向对象的程序设计,它主要具有以下特点: 1 继承自C语言的优点:语言简洁、紧凑,使用方便、灵活;拥有丰富的运算符;生成的目标代码质量高,程序执行效率高...3 同时支持面向过程和面向对象的方法:在C++环境下既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。因此它也具有数据封装和隐藏、继承和多态等面向对象的特征。...C++语言既保留了C语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,可方便地构造出模拟现实问题的实体和操作;编写出的程序具有结构清晰、易于扩充等优良特性,...用C++编写的程序可读性好,生成的代码质量高,运行效率仅比汇编语言慢10%~20%。 4 C++设计成无需复杂的程序设计环境。C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。...同时避免平台限定或没有普遍用途的特性,且不使用会带来额外开销。 ❖❖❖ C++程序在可重用性、可扩充性、可维护性和可靠性等方面都较C语言得到了提高,使其更适合开发大中型的系统软件和应用程序。
目录 一、C++的背景及简要介绍 1.1 什么是C++ 1.2 C++发展史 1.3 C++的重要性 二、C++关键字 三、命名空间 2.1 命名空间定义 2.2 命名空间使用 四、C++输入...& 输出 一、C++的背景及简要介绍 1.1 什么是C++ C语言是结构化和模块化的语言,适合处理较小规模的程序。...在1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。...表达式,auto的返回值类型推导,二进制字面常量等 C++ 17 在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于可变的模板,if...cin >> a; cin >> b >> c; cout << a << endl; cout << b << " " << c << endl; return 0; } 实际上cout
元素进行访问,但它的大小是可以动态改变的,而且这个改变可以被容器自动处理 因为vector使用动态分配数组来存储它的元素,当新元素插入的时候需要扩容,一般来说进行扩容都是按照倍数扩容的,在VS上以1.5...倍扩容,在gcc上以2倍扩容,这样后来的几位数字插入的复杂度就很低了 与其他动态序列容器相比,vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效,对于其它不在末尾的删除和插入操作,效率更低...,其底层实际就是一个指针或被封装的指针,vector的迭代器就是原生态指针T*,因此迭代器失效就是迭代器底层对应指针所指向的空间销毁了,而使用一块已经被释放的空间,如果继续使用已经失效的迭代器,程序可能会崩溃...而vector扩容的操作是开辟新空间,拷贝数据到新空间,销毁旧空间,而寄存器it指向的位置是旧空间的位置,所以会出现操作已经被释放的空间的问题 解决方法是扩容之后重新赋值it ②指定元素的删除操作 void...杨辉三角问题 对于这个杨辉三角问题,我们需要一个二维数组,用C语言来写的话稍微的复杂一些,需要malloc一个指针数组,然后指针数组的指针指向一个一维数组 对于C++来说,我们需要一个vector
一、list的介绍和使用 1、list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的节点中...还有原始视图是空构造 (2)list 迭代器的使用 函数声明 接口说明 begin和end 返回第一个元素的迭代器为begin和返回最后一个元素下一个位置的迭代器为end rbegin和rend 返回第一个元素的迭代器为...不再叙述了,参数直接查cplusplus就行 (6)list迭代器失效 因为list的底层结构为带头节点的双向循环链表,所以在list中进行插入是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器...,其他的迭代器不受影响 二、list与vector的对比 list和vector都是STL中重要的序列式容器,二者在接口上基本相同,但在底层实现上有巨大的差异,我们来对比一下 对比 vector list...,不关心随机访问 两者使用场景不同,各有千秋,在使用的时候合理搭配,就可以发挥最大价值 三、list其他接口 在图中可以看到,list除了常用的几种接口以外,还有其他的功能的接口,这里简单介绍一下
显示访问) 3.需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏 4.注意在实际中的继承体系里面最好不要定义同名的成员 ---- 因为父类和子类在不同的作用域,所以可以分别在父子类中创建相同的成员变量...,但是这样只会访问子类的成员变量 ---- 若想传的是父类的_num,需要指定作用域 ---- 与函数重载的区别 fun函数,看似很像进行函数重载,但是函数重载是在同一个作用域下的 而子类B是继承的父类...name属于父类的成员,所以要去调用父类的构造函数初始化 ---- 如果不写,会在初始化列表去调用父类的默认构造函数(自己实现的全缺省的构造函数) 拷贝构造函数 子类的拷贝构造需要调用父类的拷贝构造...友元关系不能被继承 有一个函数,是你父类的友元,不是你子类的友元 ---- Display作为父类的友元函数,可以访问父类的成员变量,但是不能访问子类的成员变量 7....但是实际上依旧是不合理的,若再传入年龄、电话、住址等信息,由于这些信息都是相同的,只有名字不同,相当于把名字多存了,就会造成数据冗余,本质为空间浪费
引言 最近工作开始使用C++,于是想用C++实现一个线程池。这里就分两篇文章来记录一下实现的过程,本篇主要为理论篇,具体的实践篇,等代码功能稳定以后再总结。 2....简介 本部分从线程池作用到线程池的原理介绍。想要实现具体的线程池,需要先知道线程池有什么作用,然后再去学习他的原理,最终用代码实现出来。...线程池的作用 在具体的代码中,经常会遇到以下场景: ① 监听机制:在代码正常运行时,需要随时监听主线程的状态或者某个变量的状态,一旦状态变化立刻需要处理。...在线程池中只存在几个固定的线程,由线程池来维护,等待调度器派发已存在空闲的线程去执行对应的任务。 由此,便实现了线程的一次创建多次使用的功能,从而避免了短时间内的任务时创建与销毁线程的代价。...线程池不仅能保护资源的充分利用,还能保证不被过分调度。 线程池的原理 线程池的在初始化时,会先创建固定数量的线程;具体的任务会放在任务队列中,类似于生产者-消费者概念。
参考链接: C++ quick_exit() WSL 是 Windows Subsystem for Linux 的简称, 可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序... 或者在程序和功能选打开 适用于 Linux 的 Windows 子系统 出现提示时,重启计算机。 ...2.下载 Linux 发行版 直接参考 WSL安装指南 使用 Microsoft Store 安装的方法无法将 Linux 安装到系统盘之外的分区,这里使用的是 手动下载 的方法。 ...单击以下链接下载您喜欢的 Linux 的发行版,这里选的是 Ubuntu 20.04 Ubuntu 20.04 LTSUbuntu 18.04 LTSDebian GNU/LinuxFedora Remix...for WSLAlpine WSL 3.安装 Linux 发行版 使用 7-ZIP 或者其他工具解压下载的 appx 文件 ( 比如解压到 D:WSLUbuntu ) 然后运行 ubuntu2004
1 类布局 本节讨论不同的继承方式造成的不同内存布局。 由于C++基于C,所以C++也“基本上”兼容C。...特别地,C++规范在“结构”上使用了和C相同的,简单的内存布局原则:成员变量按其被声明的顺序排列,按具体实现所规定的对齐原则在内存地址上对齐。...所有的C/C++厂商都保证他们的C/C++编译器对于有效的C结构采用完全相同的布局。...有C++特征的C结构 当然了,C++不是复杂的C,C++本质上是面向对象的语言:包 含 继承、封装,以及多态 。原始的C结构经过改造,成了面向对象世界的基石——类。...成员函数基本上不影响类实例的大小。
1、什么是string类 (1)字符串是表示字符序列的类,string是表示字符串的字符串类 (2)标准的字符串提供了对此类对象的支持,其接口类似于标准字符容器的接口与常规容器的接口基本相同,但添加了专门用于操作单字节字符字符串的设计特性...函数名称 功能说明 operator[ ] 返回pos位置的字符,const string类调用 begin 和 end begin获取一个字符的迭代器,end获取最后一个字符的后一个位置的迭代器 rbegin...和 rend rbegin获取一个字符的迭代器,rend获取最后一个字符的后一个位置的迭代器 范围for 更简洁的遍历 void test3() { string s1("hello world"...; cout << s1 << endl; //c_str测试 cout <<s1.c_str() << endl; //c_str就是将c++的格式转化为c语言的格式,这样字符串就可以用C...简单来说就是在用之前不开空间,在真正要修改和写入时才开辟空间,可以减少空间的浪费,它是在浅拷贝的基础上增加了引用计数的方式实现的 引用计数:用来记录资源使用者的个数,在构造时,将资源的计数给成1,每增加一个对象使用该资源
前言 本文介绍了C++模板的基础概念,简单介绍了泛型编程,模板,以及模板中的函数模板与类模板等相关概念。 ---- 一、泛型编程 如何实现一个通用的交换函数(任何类型的参数都可以使用)呢?...在C++中,存在着这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码)。 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。...在编译器编译阶段,对于模板函数的使用:编译器根据传入的实参类型,推演出要生成的对应类型的函数,以供调用。...可以理解为一个通用的类,这个类中的成员变量,成员函数的形参以及成员函数的返回值的类型不用具体的指定,这些类型都是虚拟的。用类模板进行对象定义的时候,才会根据对象的实际参数类型来替代类模板中的虚拟类型。...总结 以上就是今天要讲的内容,本文介绍了C++模板的基础概念。本文作者目前也是正在学习C++相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
来源:CSDN|晚风花间寺中人 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。...1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放, 存放函数的参数值...+中主要利用new在堆区开辟内存 示例: int* func() { //利用new关键字,也可以将数据开辟到堆区 //指针 本质也是局部变量,放在栈上,指针保存的数据是放在堆区 int...int a = 10; //局部变量 return a; } //返回静态变量引用 int& test02() { static int a = 20;//静态变量,放在全局区,全局上的数据在堆区...本质:引用的本质在c++内部实现是一个指针常量.
用惯Windows的同学可能刚开始用Mac的时候并不知道如何写C++,我刚开始在Mac上写C++的时候也遇到过这个困扰,Mac上并没有Windows上自己用习惯的Visual C++,下面我分享一下个人在写...C++的时候所用的两个方法: 1.使用Xcode, 直接App Store搜索下载即可, ?...,Language选择C++,点击next。...2.接下来介绍另一种方法,对于只是学习来说,我认为不必要用那么庞大的IDE来学习,Mac自带的终端工具就行,使用方便,不占内存,我平时也是用shell来学习C++的。...接着打开终端(可以在状态栏的搜索功能直接搜索终端即可点击打开),输入cd Desktop(我把.cpp文件放在桌面)→ g++ test.cpp(运行名为test.cpp的C++文件)→然后.cpp所在位置会出现名为
前言 今天要介绍的是C++中的一个新概念——引用。 ---- 一、引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...生活中的例子:水浒传里的宋江,他父母给他取的名字是宋江,江湖人称他为及时雨(这里及时雨就是对宋江这个人的引用)。 编程上的例子: 其中a和ra代表的是一个东西。...显然,权限的缩小可以,权限的平移在一定情况下也可以,但是权限的放大是不可以的。...因为在发生类型转换(无论是显示类型转换还是隐式类型转换或者整型提升等),过程中都会产生一个临时变量(类型变换不会影响原变量的类型),C++标准规定临时变量具有常性(常性就是不能改变的意思,常量就具有常性...总结 以上就是今天要讲的内容,本文介绍了 的相关概念。本文作者目前也是正在学习C++相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
本篇主要内容: C++学习前言 C++入门知识 什么是C++: 1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。...,二进制字面常量等 C++17 在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等...:比如Lambda支持模板、范围for支持初始化等 C++23 制定ing C++还在不断的向后发展 关于C++23的讨论: C++23 1.2 C++的重要性 语言的使用广泛度: C/C++...实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。...总结 在本章节中,我们介绍了C++的发展史及其在社会上的重要意义,在C++主要入门知识上,我们又介绍了命名空间和C++上的输入和输出,而命名空间解决了C语言遗留下来的问题。
前言:C++初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C++初阶系列会持续更新,上学期间将不定时更新,但总会更的 一、前置准备 1.1获得每月的天数...,可以去看看博主之前写的博客C++ 初阶 类和对象(中)-CSDN博客 C++初阶 类和对象(下)-CSDN博客 注意:构造函数构造的日期不一定合法,可以来个判断语句,若非法,中止程序 直接上代码 Date...可以先在目标的_day上加上day,这样能方便之后的进位,比方说2023-11-16 +100就先处理成2023-11-116,之后通过GetMonthDay取得的具体进位数据来进行进位即可,这里就可以通过循环实现...上-day,比方说2023-11-17-100,就直接先转换为2023-11-(-83),然后通过月份的进位来不断的令_day增加,直到_day大于0的时候循环停止并返回对应的内容即可。...++ 关于这方面更详细的讲解请看博主之前写的文章 C++初阶 类和对象(下)-CSDN博客 Date& operator++() //前置++,先++后使用 { (*this) += 1
我在C++:18篇里说过const的用法,这里我有必要再提升进阶下const的理解。 因为你可能只知道他是怎么用的,但是他为什么这样用,其他用法呢? 首先回顾下const有什么主要的作用?...(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变 (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。...const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝...然而,其值在编译时不能被使用,因为编译器在编译时不需要知道存储的内容。自然,作为数组的大小就不行了。 在函数中声明的形参,在函数被调用时会得到实参的值。但是如果在类中呢?...当指针或引用被引入时,用户就会对函数的操作有了一定的了解,不再是透明的了,这时重载是有意义的,所以规定可以重载。 什么情况下为const分配内存?
创建C++编译环境 安装VIM PLUS 为什么安装VIM PLUS: 可以为我们提供良好的编译环境,高亮代码,智能提示等等~ git clone https://github.com/chxuan...此事将被报告的异常) 1)此时脚本开始运行 2)选择python3解释编译ycm文件 此时脚本文件会问你是选择python2还是python3来编译ycm文件?...下的调试工具。...或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能。...LLDBLLDB(Low Level Debug)是Apple正在迁移的LLVM工具套件(包括Clang)的一部分具有REPL (Read-Eval-Print Loop,交互式解释器)、C++ 和 Python
领取专属 10元无门槛券
手把手带您无忧上云