精华内容
参与话题
问答
  • C++详细学习笔记(一)

    万次阅读 多人点赞 2018-06-09 15:01:51
    首先,本次学习主要参考的书籍是C++Primer Plus第六版,为了方便今后参阅,故写下该学习笔记。 C++是在C语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言,是C语言的超集。 一、预备...

     

    首先,本次学习主要参考的书籍是C++Primer Plus第六版,为了方便今后参阅,故写下该学习笔记。
    C++是在C语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言,是C语言的超集。
    一、预备知识
          C++有三件法宝:1、继承了C语言高效、简洁、快速和可移植性的传统(C代表的过程性编程);2、面向对象的特性带来了全新的编程方法,这种方法是为了应付复杂程度不断提高的现代编程任务而设计的;3、C++的模板特性提供了另一种全新的编程方法—泛型编程。
          (1)C++简史
        20世纪70年代,C和Pascal语言引领人们进入结构化编程时代,其中C还能生成简单、快速运行的程序,并提供了处理硬件问题的能力,如管理通信端口和磁盘驱动器,使得C成为20世纪80年代占统治地位的编程语言,这段时间同时见证了OOP的发展。       20世纪70年代早期,贝尔实验室的Dennis Ritchie致力于开发UNIX操作系统(所谓操作系统是能够管理计算机资源、处理计算机与用户之间交互的一组程序),为了完成这项工作,Ritchie需要一种语言,不仅要生成简洁、快速的程序,并能有效地控制硬件。传统的方法是使用汇编语言,但这是一种低级语言,不仅直接操作硬件,而且依赖于计算机的内部机器语言,无法在不同的计算机平台工作,这就需要一种高级语言和编译器程序。因此C就是融合了这两种特性,不仅具有低级语言的效率、硬件访问能力,而且具有高级语言的通用性、可移植性。  
         (2)C语言编程原理
           计算机语言要处理两个概念——数据和算法(程序)。数据是程序使用和处理的信息,算法是程序使用的方法。C语言刚出世的时候也是过程性的语言,这意味着它强调的是编程的算法方面。从概念上说,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现操作。随着规模扩大,就会形成像“意大利面条式编程”这样的情况。
             因此引入结构化编程以及自顶向下的原则,即将大型的程序分解成小型,便于管理的任务。
         (3)面向对象编程
           面向对象编程强调的是数据。OOP不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言满足问题的要求,其理念是设计与问题本质特性相对应的数据格式。
          所以在C++中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构。通常,类是规定了可使用哪些数据来表示对象以及可以对这些数据执行哪些操作。OOP程序设计方法首先设计类,它们准确表达了程序要处理的东西。然后可以设计一个使用这些类的对象的程序。这体现了一种自下而上的编程方法,即从低级组织(类)到高级组织(程序)的处理过程。因为OOP语言使得程序员可以轻松使用一些已有的类,所以C++真正的优点之一是:可以方便地重用和修改现有地、经过仔细测试的代码。
           (4)泛型编程
             泛型编程是C++支持的另一种编程模式,与OOP的目标相同,但是却使重用代码和抽象通用概念更简单。不过OOP强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型,它们的侧重点不同,OOP是一个管理大型项目的工具,而泛型编程提供了执行常见任务的工具,如对数据排序或合并链表。术语泛型指的是创建独立于类型的代码。例如,要对不同类型的数据进行排序,通常必须为每种类型创建一个排序函数,泛型编程需要对语言进行扩展,以便可以只编写一个泛型函数(即不是特定类型的),并将其用于各种实际类型。C++模板提供了完成这种任务的机制。
           (5)C++的起源
          与C语言一样,C++也是在贝尔实验室诞生的,Bjarne Stroustrup于20世纪80年代在这里开发出了这种语言。用他自己的话说,“C++主要是为了我的朋友和我不必再使用汇编语言、C语言或其他现代高级语言来编程而设计的。它的主要功能是可以方便地编写出好程序,让每个程序员更加快乐”。
           称C++来自C语言中地递增运算符++,运算符将变量加1,名称C++表明,它是C的扩充版本,因为Stroustrup虽然在C上加入了OOP特性和对C的泛型编程支持,但是并没有对C的组件作很大的改动,因此C++是C语言的超集,这意味着任何有效的C程序都是有效的C++程序。C++程序可以使用已有的C软件库。其中OOP部分赋予了C++语言将问题所涉及的概念联系起来的能力,C部分则赋予了C++语言紧密联系硬件的能力,这种能力的结合成就了C++的广泛传播。
           在C++获得一定成功后,才添加的模板,这使得进行泛型编程成为可能。在模板特性被使用和改进后,然们才意识到它们和OOP一样重要。
           C++融合了OOP、泛型编程和传统的过程性方法,这表明C++强调的是实用价值,而不是意识形态方法。
     

    二、C++学习的最基本知识

    (1)进入C++
            注意点: 
           1、C++对大小写敏感,其中编译器也是对拼写敏感的;
           2、文件扩展名cpp是一种表示C++程序的常用方法;
           3、C++输入输出函数为cin和cout函数,但也可使用printf()和scanf()函数,但要包含常规C语言的stdio.h文件;
         4、#include预处理编译指令、int main()作为接口的函数头、using namespace编译指令、结束mian函数的return函数;
           5、C++中,语句结束后不能省略分号;
           6、如果编译器到达main()函数末尾时没有遇到返回函数,则认为main()函数以return 0结尾;
           7、代码#include <iostream>该编译指令导致预处理器将iostream文件的内容添加到程序中,这是典型的预处理器操作:在源代码被编译之前,替换或者添加文本;将iostream文件的内容添加到程序中这一预处理器操作涉及程序与外部世界之间的通信。iostream中io指的是输入和输出。C++的输入/输出方案涉及iostream文件中的多个定义。#include编译指令导致iostream文件的内容随着源代码文件的内容一起被发送给编译器。实际上,iostream文件的内容将取代程序中的代码行#include<iostream>。原始文件没有被修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一个阶段将使用该文件。
       8、像iostream这样的文件叫做包含文件——由于它们被包含在其他文件中,也叫头文件——由于它们被包含在文件的起始处。C++编译器自带了很多头文件,每个头文件都支持一组特定的工具。C语言中头文件使用扩展名h,在C++中,对老式C的头文件保留了扩展名h,即C++也可以使用这种文件,但是C++风格的头文件是没有扩展名的,有些C头文件被转换时,会进行重命名,去掉扩展名h,并在文件名称前加上前缀c,如math.h->cmath。有时C头文件的C版本和C++版本相同,而有时新版本做了一些修改。对于纯粹的C++头文件来说,去掉h不只是形式上的改变,没有h的头文件也可以包含名称空间。
          9、如果使用iostream,而不是iostream.h,则应使用using namespace std的名称空间编译指令来使iostream中的定义对程序可用。名称空间支持是一项C++特性,旨在让你编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它有助于组织程序。一个潜在的问题是,可能使用两个已封装好的产品,而它们都包含一个名为wanda()函数,这样,使用wanda()函数时,编译器将不知道指的是哪个版本,名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中,这样就可以使用名称空间来指出想使用哪个厂商的产品。因此,Microflop Industries可以将其定义放到一个名为Microflop的名称空间中,这样其wanda()函数的全称为Microflop::wanda();这样,程序就可以使用名称空间来区分不同的版本了。按这种方式,类、函数和变量便的是C++编译器的标准组件,它们现在都被放置在名称空间std中,这意味着在iostream中定义的用于输出的cout变量实际上是std::cout,因此可以省略编译指令using。
          10、对于cout<<"Come up";语句来说,从概念上看,输出是一个流,即从程序流出的一系列字符。cout对象表示这种流,其属性是在iostream文件中定义的。cout的对象属性包含一个插入运算符<<,它可以将其右侧的信息插入到流中。
         11、endl控制符,其重起一行的作用,和cout一样,endl也是在头文件中定义的,且位于名称空间std中。其中所谓的控制符是像endl一样对cout来说有特殊含义的特殊符号。C++中还提供了一种在输出中指示换行的旧方法,就是在“/n”,一般将其放在字符串的引号中,两者之间的区别在于,endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用“\n“不能提供这样的保证,这意味着在有些系统中,有时可能在你输入信息后才出现提示。
      12、源代码中的标记和空白。标记是指一行代码中不可分割的元素,空白则是空格、制表符和回车的统称。标记之间一般用空白来分开。
       13、声明不一定是定义,在C++中尽可能首次使用变量前声明它,这意味着将导致编译器为变量分配内存空间,而C中所有变量的声明通常都位于函数或过程的开始位置。
         14、对于类ostream和istream类,从技术上说,它们并没有被内置到C++语言中,而是语言标准指定的类,这些类的定义位于iostream文件中,没有被内置到编译器中。
         15、类描述了可对类对象执行的所有操作,要对特定对象执行这些允许的操作,需要给该对象发送一条信息。C++提供了两种发送消息的方法:一种是使用类方法;另一种方式是重新定义运算符,cin和cout采用的就是这种方式。

         16、例如x=sqrt(6.25),表达式sqrt(6.25)被称为函数调用,被调用的函数叫做被调用函数,包含函数调用的函数叫做调用函数。对于有返回值的函数来说,函数执行完毕后,语句中的函数调用部分将被替换为返回值。因此在使用函数之前,C++编译器必须知道函数的参数类型和返回值类型。如果缺少这些信息,编译器将不知道如何解释返回值。C++提供这种信息的方式就是使用函数原型语句。例如sqrt()的函数原型就像这样:double  sqrt(double);函数原型之于函数就像变量声明至于变量——指出涉及的类型。原型结尾的分号表明它是一条语句,这使得它是一个函数原型,而不是函数头。如果省略分号,编译器将这行代码解释为一个函数头,并要求接着提供定义该函数的函数体。但不要混淆函数原型和函数定义,原型只描述函数接口,它描述的是发送给函数的信息和返回的信息,而定义中包含了函数的代码。C和C++将库函数的这两项特性分开了,库函数中包含了函数的编译代码,而头文件只包含了原型.

    17、函数变体:有多个参数,如 double pow(double,double);不接受任何参数,如int rand(void);没有返回值,如void bucks(double),这个函数是将数字以美元、美分的格式显示在屏幕上,由于这个函数把值发送给屏幕,而不是调用函数,因此不需要返回值,也不能将该函数调用放在赋值语句或其他表达式中。相反,应使用一条纯粹的函数调用语句:bucks(1234.56)。

    18、对于main()函数来说,main函数是一个有返回值函数,所以需要使用关键字return来提供返回值,并结束函数,这就是为什么在main()函数结尾使用语句:return 0;的原因,但是这个返回值到底是返回到哪里了呢?事实上,可以将计算机操作系统看成是调用程序,因此main()函数的返回值并不是返回给程序的其他部分,而是返回给操作系统。

    19、让程序访问名称空间std的方法有多种,下面是其中4种:(1)将using namespace std;放在函数定义之前,让文件中所有函数都能使用名称空间std中所有元素;(2)将using namespace std;放在特定的函数定义中,让该函数能够使用名称空间std中的所有元素;(3)在特定的函数中使用类似using std::cout;这样的编译指令,而不是using namesapce std;,让该函数能够使用指定的元素,如cout。(4)完全不使用编译指令using,而在需要使用名称空间std中的元素时,使用前缀std::,如下所示:std::cout<<"     "<<std::endl。

    、总结

    1、有多种类型的C++语句,包含下述6种:声明语句、赋值语句、消息语句:将消息发送给对象,激发某种行动。、函数调用、函数原型、返回语句。

    2、C++提供了两个用于处理输入和输出的预定义对象(cin和cout),它们是istream和ostream类的实例,这两个类是在iostream文件中定义的。为ostream类定义的插入运算符(<<)使得将数据插入到输出流成为可能;为istream类定义的抽取运算符(>>)能够从输入流中抽取信息。cin和cout都是智能对象,能够根据程序上下文自动将信息从一种形式转换为另一种形式。

    3、C++可以使用大量的C库函数,要使用库函数,应当包含提供该函数原型的头文件。

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 2018C/C++学习路线图,内附完整自学路线+视频+面试

    万次阅读 多人点赞 2018-09-25 16:29:24
    有人说:“C生万物,编程之本”,这一点都没有错! C语言是最接近计算机的语言,...因为所有的高级语言都是以C语言为基础的(像JAVA,C++,C#等等; C语言已经存在很多年了,它有广泛的使用团体并且有大量的现成代...

    有人说:“C生万物,编程之本”,这一点都没有错!

    C语言是最接近计算机的语言,很多时间,我们都会发现,C语言是非常有必要学习的。

    为什么学C语言?

    • C语言是最接近计算机的语言,可以让你更好的了解计算机;
    • 如果你学习过C语言,你就能学习现在任何的高级编程语言。因为所有的高级语言都是以C语言为基础的(像JAVA,C++,C#等等;
    • C语言已经存在很多年了,它有广泛的使用团体并且有大量的现成代码可以利用。
    • C语言是唯一一个向你阐述指针的本质的语言。而C#和Java干脆跳过了指针这个题目。可是指针确实使C语言变得更加强大。
    • 找编程开发方面的工作时,C语言仍然是最普遍需要的语言。所以它值得你花时间去学会它。 任何里面有微处理器的设备都支持C语言。从微波炉到手机,都是由C语言技术来推动的。

    学完C语言可以干什么?

    可以看一下这个职业发展规划图,如果你还不知道自己的下一步是什么?这是一个很好的职业规划路线,希望能帮到大家。

    C/C++学习线路图

    点击可查看大图

    因为图片较大,所以可能会被压缩,不过可以点击查看大图,我也会一一把每个阶段知识点,学习目标分列出来,让大家更好的学习。

    阶段一:C语言开发

    配套视频:

    轻松掌握C语言视频教程(会打字就能学会)

    源码链接:https://pan.baidu.com/s/1UF3Va4zIozuwSoo7uzfHJw 密码:ofh9

    计算机等级考试二级c语言

    视频https://pan.baidu.com/s/1dAajvw

    阶段二:C高级编程

    配套视频:

    C语言提高深入浅出

    链接:https://pan.baidu.com/s/1jhJplSj4-ZPzSecz1elr4A 密码:ov17

    C++关系型数据库编程 | 4天从入门到精通​

    链接:https://pan.baidu.com/s/1ZceER8qUkRf48m0moQvDng 密码:bw5r

    阶段三:C++核心编程

    配套视频:

    C++核心编程_打造你的核心编程技能​

    链接:https://pan.baidu.com/s/1F_tvZX3h6MrlCl3U6RUJtA 密码:cka8

    C++ STL 高级教程 | 深入浅出版

    链接:https://pan.baidu.com/s/1sli_-2F9IENir1ZeLjXRMQ密码:cj6j

    阶段四:桌面应用开发

    配套视频

    步步打造-frameQT自定义界面​

    链接:https://pan.baidu.com/s/19iTWrJWkmAmg9eIBciB8AQ 密码:8f44

    MFC进阶教程深入浅出版​

    链接:https://pan.baidu.com/s/1HgL5A033X-ZcA9zetr1cHA 密码:y0hj

    阶段五:Linux系统编程

    配套视频:

    学好linux? 从零基础系统编程开始

    链接:https://pan.baidu.com/s/17E_5UIK_naKCbSIy7IHVfg 密码:3l77

    阶段六:Linux网络编程

    配套视频:

    linux典藏系列之 网络编程​

    链接:https://pan.baidu.com/s/1pNonADaGLktICkpeqTUCCQ 密码:yfyy

    阶段七:项目实战相关

    配套视频:

    C++与分布式数据库开发:http://pan.baidu.com/s/1i5408vV

    资料:http://pan.baidu.com/s/1o7SwLrs 密码:2g5t

    技术干货-Linux Shell精通教程

    链接:https://pan.baidu.com/s/1Ss0JXNkjT6WuPw5rzc-KGQ 密码:ziha

    阶段八:网络攻防相关

    配套视频

    C++与安全协议开发​

    资料:http://pan.baidu.com/s/1pLDOmXd 密码:wyp6

    网络攻防的艺术之TCP协议篇

    链接:https://pan.baidu.com/s/1o1u1sFb7p-8pQocpw9G9iw 密码:5q1w

     

    目前有的视频已经更新,最后来一下面试题:

    面试题 链接:https://pan.baidu.com/s/1XDY_gcK2KOT0nz0WRBo5gg 
    密码:m6i1

    展开全文
  • C++学习之路(15)---C++ 资源大全(太全了)

    万次阅读 多人点赞 2017-10-23 11:34:56
    C++是在C语言的基础上开发的一种集面向对象编程、泛型编程...内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++ Standard Library:是一系列类和函数的集合

    C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。

    关于 C++ 框架、库和资源的一些汇总列表。

    内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。

    标准库

    框架

    C++通用框架和库 

    • Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合
    • ASL :Adobe源代码库提供了同行的评审和可移植的C++源代码库。
    • Boost :大量通用C++库的集合。
    • BDE :来自于彭博资讯实验室的开发环境。
    • Cinder:提供专业品质创造性编码的开源开发社区。
    • Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。
    • Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。
    • EASTL :EA-STL公共部分
    • ffead-cpp :企业应用程序开发框架
    • Folly:由Facebook开发和使用的开源C++库
    • JUCE :包罗万象的C++类库,用于开发跨平台软件
    • libPhenom:用于构建高性能和高度可扩展性系统的事件框架。
    • LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO
    • LibU : C语言写的多平台工具库
    • Loki :C++库的设计,包括常见的设计模式和习语的实现。
    • MiLi :只含头文件的小型C++库
    • openFrameworks :开发C++工具包,用于创意性编码。
    • Qt :跨平台的应用程序和用户界面框架
    • Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。
    • ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。
    • STLport:是STL具有代表性的版本
    • STXXL:用于额外的大型数据集的标准模板库。
    • Ultimate++ :C++跨平台快速应用程序开发框架
    • Windows Template Library:用于开发Windows应用程序和UI组件的C++库
    • Yomm11 :C++11的开放multi-methods.

    人工智能

    • btsk :游戏行为树启动器工具
    • Evolving Objects:基于模板的,ANSI C++演化计算库,能够帮助你非常快速地编写出自己的随机优化算法。
    • Neu:C++11框架,编程语言集,用于创建人工智能应用程序的多用途软件系统。

    异步事件循环

    • Boost.Asio:用于网络和底层I/O编程的跨平台的C++库。
    • libev :功能齐全,高性能的时间循环,轻微地仿效libevent,但是不再像libevent一样有局限性,也修复了它的一些bug。
    • libevent :事件通知库
    • libuv :跨平台异步I/O。

    音频

    音频,声音,音乐,数字化音乐库 

    • FMOD :易于使用的跨平台的音频引擎和音频内容的游戏创作工具。
    • Maximilian :C++音频和音乐数字信号处理库
    • OpenAL :开源音频库—跨平台的音频API
    • Opus:一个完全开放的,免版税的,高度通用的音频编解码器
    • Speex:免费编解码器,为Opus所废弃
    • Tonic: C++易用和高效的音频合成
    • Vorbis: Ogg Vorbis是一种完全开放的,非专有的,免版税的通用压缩音频格式。

    生态学

    生物信息,基因组学和生物技术 

    • libsequence:用于表示和分析群体遗传学数据的C++库。
    • SeqAn:专注于生物数据序列分析的算法和数据结构。
    • Vcflib :用于解析和处理VCF文件的C++库
    • Wham:直接把联想测试应用到BAM文件的基因结构变异。

    压缩

    压缩和归档库 

    • bzip2:一个完全免费,免费专利和高质量的数据压缩
    • doboz:能够快速解压缩的压缩库
    • PhysicsFS:对各种归档提供抽象访问的库,主要用于视频游戏,设计灵感部分来自于Quake3的文件子系统。
    • KArchive:用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。
    • LZ4 :非常快速的压缩算法
    • LZHAM :无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。
    • LZMA :7z格式默认和通用的压缩方法。
    • LZMAT :及其快速的实时无损数据压缩库
    • miniz:单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。
    • Minizip:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。
    • Snappy :快速压缩和解压缩
    • ZLib :非常紧凑的数据流压缩库
    • ZZIPlib:提供ZIP归档的读权限。

    并发性

    并发执行和多线程 

    • Boost.Compute :用于OpenCL的C++GPU计算库
    • Bolt :针对GPU进行优化的C++模板库
    • C++React :用于C++11的反应性编程库
    • Intel TBB :Intel线程构件块
    • Libclsph:基于OpenCL的GPU加速SPH流体仿真库
    • OpenCL :并行编程的异构系统的开放标准
    • OpenMP:OpenMP API
    • Thrust :类似于C++标准模板库的并行算法库
    • HPX :用于任何规模的并行和分布式应用程序的通用C++运行时系统
    • VexCL :用于OpenCL/CUDA 的C++向量表达式模板库。

    容器

    • C++ B-tree :基于B树数据结构,实现命令内存容器的模板库
    • Hashmaps: C++中开放寻址哈希表算法的实现

    密码学

    • Bcrypt :一个跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系统和处理器中。
    • BeeCrypt
    • Botan: C++加密库
    • Crypto++:一个有关加密方案的免费的C++库
    • GnuPG: OpenPGP标准的完整实现
    • GnuTLS :实现了SSL,TLS和DTLS协议的安全通信库
    • Libgcrypt
    • libmcrypt
    • LibreSSL:免费的SSL/TLS协议,属于2014 OpenSSL的一个分支
    • LibTomCrypt:一个非常全面的,模块化的,可移植的加密工具
    • libsodium:基于NaCI的加密库,固执己见,容易使用
    • Nettle 底层的加密库
    • OpenSSL : 一个强大的,商用的,功能齐全的,开放源代码的加密库。
    • Tiny AES128 in C :用C实现的一个小巧,可移植的实现了AES128ESB的加密算法

    数据库

    数据库,SQL服务器,ODBC驱动程序和工具 

    • hiberlite :用于Sqlite3的C++对象关系映射
    • Hiredis: 用于Redis数据库的很简单的C客户端库
    • LevelDB: 快速键值存储库
    • LMDB:符合数据库四大基本元素的嵌入键值存储
    • MySQL++:封装了MySql的C API的C++ 包装器
    • RocksDB:来自Facebook的嵌入键值的快速存储
    • SQLite:一个完全嵌入式的,功能齐全的关系数据库,只有几百KB,可以正确包含到你的项目中。

    调试

    调试库, 内存和资源泄露检测,单元测试 

    • Boost.Test:Boost测试库
    • Catch:一个很时尚的,C++原生的框架,只包含头文件,用于单元测试,测试驱动开发和行为驱动开发。
    • CppUnit:由JUnit移植过来的C++测试框架
    • CTest:CMake测试驱动程序
    • googletest:谷歌C++测试框架
    • ig-debugheap:用于跟踪内存错误的多平台调试堆
    • libtap:用C语言编写测试
    • MemTrack —用于C++跟踪内存分配
    • microprofile- 跨平台的网络试图分析器
    • minUnit :使用C写的迷你单元测试框架,只使用了两个宏
    • Remotery:用于web视图的单一C文件分析器
    • UnitTest++:轻量级的C++单元测试框架

    游戏引擎

    • Cocos2d-x :一个跨平台框架,用于构建2D游戏,互动图书,演示和其他图形应用程序。
    • Grit :社区项目,用于构建一个免费的游戏引擎,实现开放的世界3D游戏。
    • Irrlicht :C++语言编写的开源高性能的实时#D引擎
    • Polycode:C++实现的用于创建游戏的开源框架(与Lua绑定)。

    图形用户界面

    • CEGUI : 很灵活的跨平台GUI库
    • FLTK :快速,轻量级的跨平台的C++GUI工具包。
    • GTK+: 用于创建图形用户界面的跨平台工具包
    • gtkmm :用于受欢迎的GUI库GTK+的官方C++接口。
    • imgui:拥有最小依赖关系的立即模式图形用户界面
    • libRocket : libRocket 是一个C++ HTML/CSS 游戏接口中间件
    • MyGUI :快速,灵活,简单的GUI
    • Ncurses:终端用户界面
    • QCustomPlot :没有更多依赖关系的Qt绘图控件
    • Qwt :用户与技术应用的Qt 控件
    • QwtPlot3D :功能丰富的基于Qt/OpenGL的C++编程库,本质上提供了一群3D控件
    • OtterUI : OtterUI 是用于嵌入式系统和互动娱乐软件的用户界面开发解决方案
    • PDCurses 包含源代码和预编译库的公共图形函数库
    • wxWidgets C++库,允许开发人员使用一个代码库可以为widows, Mac OS X,Linux和其他平台创建应用程序

    图形

    • bgfx:跨平台的渲染库
    • Cairo:支持多种输出设备的2D图形库
    • Horde3D 一个小型的3D渲染和动画引擎
    • magnum C++11和OpenGL 2D/3D 图形引擎
    • Ogre 3D 用C++编写的一个面向场景,实时,灵活的3D渲染引擎(并非游戏引擎)
    • OpenSceneGraph 具有高性能的开源3D图形工具包
    • Panda3D 用于3D渲染和游戏开发的框架,用Python和C++编写。
    • Skia 用于绘制文字,图形和图像的完整的2D图形库
    • urho3d 跨平台的渲染和游戏引擎。

    图像处理

    • Boost.GIL:通用图像库
    • CImg :用于图像处理的小型开源C++工具包
    • CxImage :用于加载,保存,显示和转换的图像处理和转换库,可以处理的图片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。
    • FreeImage :开源库,支持现在多媒体应用所需的通用图片格式和其他格式。
    • GDCM:Grassroots DICOM 库
    • ITK:跨平台的开源图像分析系统
    • Magick++:ImageMagick程序的C++接口
    • MagickWnd:ImageMagick程序的C++接口
    • OpenCV : 开源计算机视觉类库
    • tesseract-ocr:OCR引擎
    • VIGRA :用于图像分析通用C++计算机视觉库
    • VTK :用于3D计算机图形学,图像处理和可视化的开源免费软件系统。

    国际化

    • gettext :GNU `gettext’
    • IBM ICU:提供Unicode 和全球化支持的C、C++ 和Java库
    • libiconv :用于不同字符编码之间的编码转换库

    Jason

    • frozen : C/C++的Jason解析生成器
    • Jansson :进行编解码和处理Jason数据的C语言库
    • jbson :C++14中构建和迭代BSON data,和Json 文档的库
    • JeayeSON:非常健全的C++ JSON库,只包含头文件
    • JSON++ : C++ JSON 解析器
    • json-parser:用可移植的ANSI C编写的JSON解析器,占用内存非常少
    • json11 :一个迷你的C++11 JSON库
    • jute :非常简单的C++ JSON解析器
    • ibjson:C语言中的JSON解析和打印库,很容易和任何模型集成。
    • libjson:轻量级的JSON库
    • PicoJSON:C++中JSON解析序列化,只包含头文件
    • qt-json :用于JSON数据和 QVariant层次间的相互解析的简单类
    • QJson:将JSON数据映射到QVariant对象的基于Qt的库
    • RapidJSON: 用于C++的快速JSON 解析生成器,包含SAX和DOM两种风格的API
    • YAJL :C语言中快速流JSON解析库

    日志

    • Boost.Log :设计非常模块化,并且具有扩展性
    • easyloggingpp:C++日志库,只包含单一的头文件。
    • Log4cpp :一系列C++类库,灵活添加日志到文件,系统日志,IDSA和其他地方。
    • templog:轻量级C++库,可以添加日志到你的C++应用程序中

    机器学习

    • Caffe :快速的神经网络框架
    • CCV :以C语言为核心的现代计算机视觉库
    • mlpack :可扩展的C++机器学习库
    • OpenCV:开源计算机视觉库
    • Recommender:使用协同过滤进行产品推荐/建议的C语言库。
    • SHOGUN:Shogun 机器学习工具
    • sofia-ml :用于机器学习的快速增量算法套件

    数学

    • Armadillo :高质量的C++线性代数库,速度和易用性做到了很好的平衡。语法和MatlAB很相似
    • blaze:高性能的C++数学库,用于密集和稀疏算法。
    • ceres-solver :来自谷歌的C++库,用于建模和解决大型复杂非线性最小平方问题。
    • CGal: 高效,可靠的集合算法集合
    • cml :用于游戏和图形的免费C++数学库
    • Eigen :高级C++模板头文件库,包括线性代数,矩阵,向量操作,数值解决和其他相关的算法。
    • GMTL:数学图形模板库是一组广泛实现基本图形的工具。
    • GMP:用于个高精度计算的C/C++库,处理有符号整数,有理数和浮点数。

    多媒体

    • GStreamer :构建媒体处理组件图形的库
    • LIVE555 Streaming Media :使用开放标准协议(RTP/RTCP, RTSP, SIP) 的多媒体流库
    • libVLC :libVLC (VLC SDK)媒体框架
    • QtAv:基于Qt和FFmpeg的多媒体播放框架,能够帮助你轻而易举地编写出一个播放器
    • SDL :简单直控媒体层
    • SFML :快速,简单的多媒体库

    网络

    • ACE:C++面向对象网络变成工具包
    • Boost.Asio:用于网络和底层I/O编程的跨平台的C++库
    • Casablanca:C++ REST SDK
    • cpp-netlib:高级网络编程的开源库集合
    • Dyad.c:C语言的异步网络
    • libcurl :多协议文件传输库
    • Mongoose:非常轻量级的网络服务器
    • Muduo :用于Linux多线程服务器的C++非阻塞网络库
    • net_skeleton :C/C++的TCP 客户端/服务器库
    • nope.c :基于C语言的超轻型软件平台,用于可扩展的服务器端和网络应用。 对于C编程人员,可以考虑node.js
    • Onion :C语言HTTP服务器库,其设计为轻量级,易使用。
    • POCO:用于构建网络和基于互联网应用程序的C++类库,可以运行在桌面,服务器,移动和嵌入式系统。
    • RakNet:为游戏开发人员提供的跨平台的开源C++网络引擎。
    • Tuf o :用于Qt之上的C++构建的异步Web框架。
    • WebSocket++ :基于C++/Boost Aiso的websocket 客户端/服务器库
    • ZeroMQ :高速,模块化的异步通信库

    物理学

    动力学仿真引擎 

    • Box2D:2D的游戏物理引擎。
    • Bullet :3D的游戏物理引擎。
    • Chipmunk :快速,轻量级的2D游戏物理库
    • LiquidFun:2D的游戏物理引擎
    • ODE :开放动力学引擎-开源,高性能库,模拟刚体动力学。
    • ofxBox2d:Box2D开源框架包装器。
    • Simbody :高性能C++多体动力学/物理库,模拟关节生物力学和机械系统,像车辆,机器人和人体骨骼。

    机器人学

    • MOOS-IvP :一组开源C++模块,提供机器人平台的自主权,尤其是自主的海洋车辆。
    • MRPT:移动机器人编程工具包
    • PCL :点云库是一个独立的,大规模的开放项目,用于2D/3D图像和点云处理。
    • Robotics Library (RL): 一个独立的C++库,包括机器人动力学,运动规划和控制。
    • RobWork:一组C++库的集合,用于机器人系统的仿真和控制。
    • ROS :机器人操作系统,提供了一些库和工具帮助软件开发人员创建机器人应用程序。

    科学计算

    • FFTW :用一维或者多维计算DFT的C语言库。
    • GSL:GNU科学库。

    脚本

    • ChaiScript :用于C++的易于使用的嵌入式脚本语言。
    • Lua :用于配置文件和基本应用程序脚本的小型快速脚本引擎。
    • luacxx:用于创建Lua绑定的C++ 11 API
    • SWIG :一个可以让你的C++代码链接到JavaScript,Perl,PHP,Python,Tcl和Ruby的包装器/接口生成器
    • V7:嵌入式的JavaScript 引擎。
    • V8 :谷歌的快速JavaScript引擎,可以被嵌入到任何C++应用程序中。

    序列化

    • Cap’n Proto :快速数据交换格式和RPC系统。
    • cereal :C++11 序列化库
    • FlatBuffers :内存高效的序列化库
    • MessagePack :C/C++的高效二进制序列化库,例如 JSON
    • protobuf :协议缓冲,谷歌的数据交换格式。
    • protobuf-c :C语言的协议缓冲实现
    • SimpleBinaryEncoding:用于低延迟应用程序的对二进制格式的应用程序信息的编码和解码。
    • Thrift :高效的跨语言IPC/RPC,用于C++,Java,Python,PHP,C#和其它多种语言中,最初由Twitter开发。

    视频

    • libvpx :VP8/VP9编码解码SDK
    • FFmpeg :一个完整的,跨平台的解决方案,用于记录,转换视频和音频流。
    • libde265 :开放的h.265视频编解码器的实现。
    • OpenH264:开源H.364 编解码器。
    • Theora :免费开源的视频压缩格式。

    虚拟机

    • CarpVM:C中有趣的VM,让我们一起来看看这个。
    • MicroPython :旨在实现单片机上Python3.x的实现
    • TinyVM:用纯粹的ANSI C编写的小型,快速,轻量级的虚拟机。

    Web应用框架

    • Civetweb :提供易于使用,强大的,C/C++嵌入式Web服务器,带有可选的CGI,SSL和Lua支持。
    • CppCMS :免费高性能的Web开发框架(不是 CMS).
    • Crow :一个C++微型web框架(灵感来自于Python Flask)
    • Kore :使用C语言开发的用于web应用程序的超快速和灵活的web服务器/框架。
    • libOnion:轻量级的库,帮助你使用C编程语言创建web服务器。
    • QDjango:使用C++编写的,基于Qt库的web框架,试图效仿Django API,因此得此名。
    • Wt :开发Web应用的C++库。

    XML

    XML就是个垃圾,xml的解析很烦人,对于计算机它也是个灾难。这种糟糕的东西完全没有存在的理由了。——Linus Torvalds 

    • Expat :用C语言编写的xml解析库
    • Libxml2 :Gnome的xml C解析器和工具包
    • libxml++ :C++的xml解析器
    • PugiXML :用于C++的,支持XPath的轻量级,简单快速的XML解析器。
    • RapidXml :试图创建最快速的XML解析器,同时保持易用性,可移植性和合理的W3C兼容性。
    • TinyXML :简单小型的C++XML解析器,可以很容易地集成到其它项目中。
    • TinyXML2:简单快速的C++CML解析器,可以很容易集成到其它项目中。
    • TinyXML++:TinyXML的一个全新的接口,使用了C++的许多许多优势,模板,异常和更好的异常处理。
    • Xerces-C++ :用可移植的C++的子集编写的XML验证解析器。

    多项混杂

    一些有用的库或者工具,但是不适合上面的分类,或者还没有分类。 
    • C++ Format :C++的小型,安全和快速格式化库
    • casacore :从aips++ 派生的一系列C++核心库
    • cxx-prettyprint:用于C++容器的打印库
    • DynaPDF :易于使用的PDF生成库
    • gcc-poison :帮助开发人员禁止应用程序中的不安全的C/C++函数的简单的头文件。
    • googlemock:编写和使用C++模拟类的库
    • HTTP Parser :C的http请求/响应解析器
    • libcpuid :用于x86 CPU检测盒特征提取的小型C库
    • libevil :许可证管理器
    • libusb:允许移动访问USB设备的通用USB库
    • PCRE:正则表达式C库,灵感来自于Perl中正则表达式的功能。
    • Remote Call Framework :C++的进程间通信框架。
    • Scintilla :开源的代码编辑控件
    • Serial Communication Library :C++语言编写的跨平台,串口库。
    • SDS:C的简单动态字符串库
    • SLDR :超轻的DNS解析器
    • SLRE: 超轻的正则表达式库
    • Stage :移动机器人模拟器
    • VarTypes:C++/Qt4功能丰富,面向对象的管理变量的框架。
    • ZBar:‘条形码扫描器’库,可以扫描照片,图片和视频流中的条形码,并返回结果。
    • CppVerbalExpressions :易于使用的C++正则表达式
    • QtVerbalExpressions:基于C++ VerbalExpressions 库的Qt库
    • PHP-CPP:使用C++来构建PHP扩展的库
    • Better String :C的另一个字符串库,功能更丰富,但是没有缓冲溢出问题,还包含了一个C++包装器。

    软件

    用于创建开发环境的软件 

    编译器

    • Clang :由苹果公司开发的
    • GCC:GNU编译器集合
    • Intel C++ Compiler :由英特尔公司开发
    • LLVM :模块化和可重用编译器和工具链技术的集合
    • Microsoft Visual C++ :MSVC,由微软公司开发
    • Open WatCom :Watcom,C,C++和Fortran交叉编译器和工具
    • TCC :轻量级的C语言编译器

    在线编译器

    • codepad :在线编译器/解释器,一个简单的协作工具
    • CodeTwist:一个简单的在线编译器/解释器,你可以粘贴的C,C++或者Java代码,在线执行并查看结果
    • coliru :在线编译器/shell, 支持各种C++编译器
    • Compiler Explorer:交互式编译器,可以进行汇编输出
    • CompileOnline:Linux上在线编译和执行C++程序
    • Ideone :一个在线编译器和调试工具,允许你在线编译源代码并执行,支持60多种编程语言。

    调试器

    集成开发环境(IDE)

    • AppCode :构建与JetBrains’ IntelliJ IDEA 平台上的用于Objective-C,C,C++,Java和Java开发的集成开发环境
    • CLion:来自JetBrains的跨平台的C/C++的集成开发环境
    • Code::Blocks :免费C,C++和Fortran的集成开发环境
    • CodeLite :另一个跨平台的免费的C/C++集成开发环境
    • Dev-C++:可移植的C/C++/C++11集成开发环境
    • Eclipse CDT:基于Eclipse平台的功能齐全的C和C++集成开发环境
    • Geany :轻量级的快速,跨平台的集成开发环境。
    • IBM VisualAge :来自IBM的家庭计算机集成开发环境。
    • Irony-mode:由libclang驱动的用于Emacs的C/C++微模式
    • KDevelop:免费开源集成开发环境
    • Microsoft Visual Studio :来自微软的集成开发环境
    • NetBeans :主要用于Java开发的的集成开发环境,也支持其他语言,尤其是PHP,C/C++和HTML5。
    • Qt Creator:跨平台的C++,Javascript和QML集成开发环境,也是Qt SDK的一部分。
    • rtags:C/C++的客户端服务器索引,用于 跟基于clang的emacs的集成
    • Xcode :由苹果公司开发
    • YouCompleteMe:一个用于Vim的根据你敲的代码快速模糊搜索并进行代码补全的引擎。

    构建系统

    • Bear :用于为clang工具生成编译数据库的工具
    • Biicode:基于文件的简单依赖管理器。
    • CMake :跨平台的免费开源软件用于管理软件使用独立编译的方法进行构建的过程。
    • CPM:基于CMake和Git的C++包管理器
    • FASTBuild:高性能,开源的构建系统,支持高度可扩展性的编译,缓冲和网络分布。
    • Ninja :专注于速度的小型构建系统
    • Scons :使用Python scipt 配置的软件构建工具
    • tundra :高性能的代码构建系统,甚至对于非常大型的软件项目,也能提供最好的增量构建次数。
    • tup:基于文件的构建系统,用于后台监控变化的文件。

    静态代码分析


    展开全文
  • C++学习之路(一)

    千次阅读 2018-07-03 17:21:45
    using name space; std::cout std::endl 名称空间std short的范围是【-32768,32767】 unsigned short范围【0,65535】注意上下溢出 cout.setf(ios_base::fixed,ios_base::floatfield); //setf()主要用来修改结果的...

    此篇博文为C++学习之路第一篇,如前所述,我们的资料主要依据《C++ Primer Plus》这本书,顺序也基本按照书中的理解;欢迎大家指正交流!

    using name space;

    std::cout std::endl 名称空间std 

    short的范围是【-32768,32767】 unsigned short范围【0,65535】注意上下溢出

    cout.setf(ios_base::fixed,ios_base::floatfield);         //setf()主要用来修改结果的显示方式
    ios_base::fixed是设置cout为定点输出格式

    ios_base::floatfield是设置输出时按浮点格式,小数点后有6位数字;注意float类型表示有效位数的能力有限

    int yamcosts[3]={20,30,5};  定义数组大小为3并初始化值,如果没有初始化则元素值将是不确定的,值是以前驻留在该内存中的值。

    sizeof单位是字节

    float hotelTips[5]={5.0,2.5}; 其他三个被自动设置为0
    short things[]={1,5,3,8}; 自动计算有几个成员元素;

    char dog[5]={'b','e','a','u','x'};           不是字符串

    char cat[5]={'f','a','t','s','\0'};              是字符串,要有空字符

    char fish[]="Bubbles";            字符串常量

    char shirt_size='S'            'S'=83

    char shirt_size="S"            非法,“S”实际表示字符串所在的内存地址

    字符串自动拼接

    cout<<"I'd give my right ar"

    "m to be a great violinist.\n";

    // strings.cpp -- storing strings in an array
    #include <iostream>
    #include <cstring>  // for the strlen() function
    int main()
    {
    	using namespace std;
    	const int Size = 15;
    	char name1[Size];               // empty array
    	char name2[Size] = "C++owboy";  // initialized array
    	// NOTE: some implementations may require the static keyword
    	// to initialize the array name2
    
    	cout << "Howdy! I'm " << name2;
    	cout << "! What's your name?\n";
    	cin >> name1;
    	cout << "Well, " << name1 << ", your name has ";
    	cout << strlen(name1) << " letters and is stored\n";      //空字符不计入
    	cout << "in an array of " << sizeof(name1) << " bytes.\n";
    	cout << "Your initial is " << name1[0] << ".\n";
    	name2[3] = '\0';                // 使用\0截短字符串 后面其实还有其他字符
    	cout << "Here are the first 3 characters of my name: ";
    	cout << name2 << endl;
    	system("pause");   //暂停为了能够方便查看结果,不然程序运行太快
    	return 0;
    }
    
    运行结果:
    // instr1.cpp -- reading more than one string
    #include <iostream>
    int main()
    {
    	using namespace std;
    	const int ArSize = 20;
    	char name[ArSize];
    	char dessert[ArSize];
    
    	cout << "Enter your name:\n";
    	cin >> name;
    	cout << "Enter your favorite dessert:\n";
    	cin >> dessert;
    	cout << "I have some delicious " << dessert;
    	cout << " for you, " << name << ".\n";
    	system("pause");
    	return 0;
    }
    


    另外一种结果:


    Zhang留在输入队列当中,Jack被输入到数组当中;在队列中搜索时发现了Zhang,所以将其输入到dessert数组中;

    // instr2.cpp -- reading more than one word with getline
    #include <iostream>
    int main()
    {
    	using namespace std;
    	const int ArSize = 20;
    	char name[ArSize];
    	char dessert[ArSize];
    
    	cout << "Enter your name:\n";
    	cin.getline(name, ArSize);  // reads through newline
    	cout << "Enter your favorite dessert:\n";
    	cin.getline(dessert, ArSize);
    	cout << "I have some delicious " << dessert;
    	cout << " for you, " << name << ".\n";
    	system("pause");
    	return 0;
    }

    getline每次读取一行,通过换行符来确定行尾,但不保留换行符,本例中最多存储19个字符,最后一位要自动保存为空字符;

    cin.get(name,ArSize);

    cin.get();           //避免无法读取第二行,因为换行符被留在输入队列中

    cin.get(dessert,ArSize);

    // instr3.cpp -- reading more than one word with get() & get()
    #include <iostream>
    int main()
    {
    	using namespace std;
    	const int ArSize = 20;
    	char name[ArSize];
    	char dessert[ArSize];
    
    	cout << "Enter your name:\n";
    	cin.get(name, ArSize).get();    // read string, newline 避免只读到换行符而无法读取第二行 get保留换行符
    	cout << "Enter your favorite dessert:\n";
    	cin.get(dessert, ArSize);
    	cout << "I have some delicious " << dessert;
    	cout << " for you, " << name << ".\n";
    	system("pause");
    	return 0;
    }
    

    混合模式下:换行符的问题

    // numstr.cpp -- following number input with line input
    #include <iostream>
    int main()
    {
    	using namespace std;
    	cout << "What year was your house built?\n";
    	int year;
    	cin >> year;
    	cin.get();              //(cin >> year).get();如果没有这一步则address就没有机会被输入,cin会因为保留在队列中的换行符而以为address为空行
    	cout << "What is its street address?\n";
    	char address[80];
    	cin.getline(address, 80);
    	cout << "Year built: " << year << endl;
    	cout << "Address: " << address << endl;
    	cout << "Done!\n";
    	system("pause");
    	return 0;
    }
    


    string使用:

    // strtype1.cpp -- using the C++ string class
    #include <iostream>
    #include <string>               // make string class available
    int main()
    {
    	using namespace std;
    	char charr1[20];            // create an empty array
    	char charr2[20] = "jaguar"; // create an initialized array
    	string str1;                // create an empty string object
    	string str2 = "panther";    // create an initialized string
    
    	cout << "Enter a kind of feline: ";
    	cin >> charr1;
    	cout << "Enter another kind of feline: ";
    	cin >> str1;                // use cin for input
    	cout << "Here are some felines:\n";
    	cout << charr1 << " " << charr2 << " "
    		<< str1 << " " << str2 // use cout for output
    		<< endl;
    	cout << "The third letter in " << charr2 << " is "          //数组
    		<< charr2[2] << endl;
    	cout << "The third letter in " << str2 << " is "
    		<< str2[2] << endl;    // use array notation        //字符串访问
    	system("pause");
    	return 0;
    }
    
    不能将一个数组赋给另一个数组,但是可以将一个string对象赋给另一个string对象;

    string对象间操作:

    // strtype2.cpp -- assigning, adding, and appending
    #include <iostream>
    #include <string>               // make string class available
    int main()
    {
    	using namespace std;
    	string s1 = "penguin";
    	string s2, s3;
    
    	cout << "You can assign one string object to another: s2 = s1\n";
    	s2 = s1;
    	cout << "s1: " << s1 << ", s2: " << s2 << endl;
    	cout << "You can assign a C-style string to a string object.\n";
    	cout << "s2 = \"buzzard\"\n";        //转义表示双引号
    	s2 = "buzzard";
    	cout << "s2: " << s2 << endl;
    	cout << "You can concatenate strings: s3 = s1 + s2\n";
    	s3 = s1 + s2;
    	cout << "s3: " << s3 << endl;
    	cout << "You can append strings.\n";
    	s1 += s2;
    	cout << "s1 += s2 yields s1 = " << s1 << endl;
    	s2 += " for a day";
    	cout << "s2 += \" for a day\" yields s2 = " << s2 << endl;
    	system("pause");
    	return 0;
    }
    
    运行结果:

    string类的其他操作:

    // strtype3.cpp -- more string class features
    #include <iostream>
    #include <string>               // make string class available
    #include <cstring>              // C-style string library
    int main()
    {
    	using namespace std;
    	char charr1[20];
    	char charr2[20] = "jaguar";
    	string str1;
    	string str2 = "panther";
    
    	// assignment for string objects and character arrays
    	str1 = str2;                // copy str2 to str2        使用字符串类
    	strcpy_s(charr1, charr2);     // copy charr2 to charr1  对应字符数组 使用C字符串函数
    
    	// appending for string objects and character arrays
    	str1 += " paste";           // add paste to end of str1
    	strcat_s(charr1, " juice");   // add juice to end of charr1  对应字符数组
    
    	// finding the length of a string object and a C-style string
    	int len1 = str1.size();     // obtain length of str1         <strong>字符串</strong>
    	int len2 = strlen(charr1);  // obtain length of charr1       <strong>字符数组</strong>
    
    	cout << "The string " << str1 << " contains "
    		<< len1 << " characters.\n";
    	cout << "The string " << charr1 << " contains "
    		<< len2 << " characters.\n";
    	system("pause");
    	return 0;
    }
    


    下面这段代码需要特别留意一下!

    // strtype4.cpp -- line input
    #include <iostream>
    #include <string>               // make string class available
    #include <cstring>              // C-style string library
    int main()
    {
    	using namespace std;
    	char charr[20];
    	string str;          //自动调整
    
    	cout << "Length of string in charr before input: "
    		<< <strong>strlen(charr) </strong><< endl;             //我理解为内存中原来保存到大小
    	cout << "Length of string in str before input: "
    		<< <strong>str.size()</strong> << endl;                //string类自动将未被初始化的对象长度设置为0
    	cout << "Enter a line of text:\n";
    	cin.getline(charr, 20);     // indicate maximum length  getline不包括换行符
    	cout << "You entered: " << charr << endl;
    	cout << "Enter another line of text:\n";
    	getline(cin, str);          // cin now an argument; no length specifier
    	cout << "You entered: " << str << endl;
    	cout << "Length of string in charr after input: "
    		<< strlen(charr) << endl;
    	cout << "Length of string in str after input: "
    		<< str.size() << endl;
    	system("pause");
    	return 0;
    }
     

    声明结构体并使用结构体:struct 

    // structur.cpp -- a simple structure
    #include <stdafx.h>
    #include <iostream>
    
    struct inflatable   // structure declaration结构体定义
    {
    	char name[20];   //字符数组
    	float volume;
    	double price;
    };
    
    int main()
    {
    	using namespace std;
    	inflatable guest =      //可以理解为实例化?
    	{
    		"Glorious Gloria",  // name value 逗号分隔
    		1.88,               // volume value
    		29.99               // price value
    	};  // guest is a structure variable of type inflatable
    	// It's initialized to the indicated values
    	inflatable pal =
    	{
    		"Audacious Arthur",
    		3.12,
    		32.99
    	};  // pal is a second variable of type inflatable
    	// NOTE: some implementations require using
    	// static inflatable guest =
    
    	cout << "Expand your guest list with " << guest.name;
    	cout << " and " << pal.name << "!\n";
    	// pal.name is the name member of the pal variable
    	cout << "You can have both for $";
    	cout << guest.price + pal.price << "!\n";
    	system("pause");
    	return 0;
    }
    
    对应的输出结果:

    展开全文
  • 我的大学--C++学习笔记

    万次阅读 多人点赞 2011-12-04 10:07:44
    C++学习笔记(一)--基础知识sizeof用法   源文档 http://blog.csdn.net/liufei_learning/archive/2009/12/27/5088150.aspx> C++学习笔记(二)--基础知识   源文档 ...
  • C++学习路线

    万次阅读 多人点赞 2017-02-06 18:50:36
    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者。而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移动...
  • C++学习

    2019-10-30 21:23:31
    1、C与C++区别 C是面向过程,C++面向对象。 思路:任何事物都可以看做一个对象,如果觉得负责,可分解为多个对象。对象又具有其属性和行为。 C++可以在任意位置进行变量初始化 2、命名空间 using namespace std 作用...
  • 完整的c++初学者资料大全,其中包括《c++ primer》、《effective c++》、《More Effective C++》(中文版)、《STL源码剖析》等
  • 首先是一本好的C++书籍(Accelerated C++C++ Primer),然后以及尽量多的完成书籍的习题,可以帮助完成C++语法的学习。虽然前面的书籍涵盖了标准库,但是不够完善,这个时候你可以选择在线查阅C++标准库这种泛型...
  • C++学习大纲

    万次阅读 多人点赞 2018-10-09 19:25:35
    C++ 基本数据类型和表达式 C++ 无条件转移控制 C++ 子程序间的数据传递 C++ main函数的返回值 C++ 标识符的作用域 C++ 变量的生存期 C++ 宏与内联函数 C++ 函数名重载 C++ 标准库 C++ 条件编译 C++ 枚举类型 C++ ...
  • 我第一年的C++学习之路 —— C++学习方法不断转变

    万次阅读 多人点赞 2011-09-14 07:52:23
    我第一年的C++学习之路 —— C++学习方法不断转变 两本让我提升的书:  对于C++,我首先想要讲讲的是《C++ Primer Plus》与《C++ Primer》这两本书,很多人讨论过,对比过这两本书有些什么不同,适合哪些人学习之...
  • C++学习详细教程目录】

    万次阅读 多人点赞 2018-12-24 00:25:25
    本文记录之前写的【C++深度剖析学习记录】专栏里的C++文章的一个总的目录。这样更加方便个人的复习与查阅。 本人水平有限,文章中难免有出错的地方。欢迎指出您觉的不对的地方。同时也欢迎加入上述的联系方式,方便...
  • c++学习论坛推荐 强力推荐

    千次阅读 多人点赞 2013-05-09 09:29:54
    本文为大家推荐一些c++学习论坛,让大家找到相互学习的平台,希望对一些计算机编程者和对c++感兴趣的人有一些帮助,国内做的比较好的c++学习论坛有: 一、编程入门网c++频道...
  • C++ 学习路线推荐

    万次阅读 多人点赞 2015-08-24 16:01:33
    相信有很大一部分学计算机的童鞋都是靠自学,即使本身是计算机专业的同学,也会觉得仅仅通过课堂上的学习是远远不够的,而且在上课时所用到的教材也不够好。然而自学的时候有个很大的问题就是找不到合适的方向和学习...
  • 一篇非常好的c++学习方法,转自贴吧

    万次阅读 多人点赞 2015-04-10 20:06:03
    坊间流传的错误的C++学习方法一抓就是一大把。我自己在学习C++的过程中也走了许多弯路,浪费了不少时间。  为什么会存在这么多错误认识?原因主要有三个,一是C++语言的细节太多。二是一些著名的C++书籍总在(不管...
  • 必看,C/C++学习路线,C++基础到高级方法指南

    千次阅读 多人点赞 2019-02-24 12:20:26
    C/C++学习路线之C++基础到高级方法指南 C/C++遍布的领域有后端服务器,移动互联网后端,经典Windows界面开发,移动互联网端界面开发,跨平台界面开发,图形分析,系统架构,应用设计,还有现在最为流行的分布架构等...
  • C++学习书单

    千次阅读 2013-06-25 16:12:29
    关于C++的书太多了,很容易让人没有头绪。一直想整理下,把这些书列个书单出来,直到今天才动手。希望我的经验能给后来的初学者一点帮助。 1.《C++程序设计教程》 钱能 很多学校把这本书选做C++课程的教材。简单...
  • C++学习步骤

    千次阅读 2007-12-20 10:37:00
    2007-10-31 13:51C++知识分类:①基础知识(C 语言、标准库、文件、注册表、数据结构) ②高级知识(多线程、串口通讯、网口通讯、动态库、MFC、COM、ATL...第1阶段先花一个月时间学习基本C语言,然后再看林锐博士的高
  • C++学习推荐书目

    千次阅读 2006-12-15 19:56:00
    wingfiring(别逗了)(非典型秃子) 初稿steedhorse(晨星) 整理 (一) 语言入门:v 《C++ Primer》最新版本:...不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++学习未必是好事。 v 《The C++ P
  • 学习C++方法总结

    万次阅读 多人点赞 2018-09-08 09:49:06
    看了这篇文章才知道自己最近太浮躁了,学做技术也是学做人。...已经开始学习C++许久了,却进度缓慢,抓不到精髓,倍感迷茫。 本文不会深入到C++语言内部挖掘技术点。 如果你自诩C++高手,请绕道;如果...
  • C++学习书籍大全(转帖)

    千次阅读 2008-10-07 12:45:00
    不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++学习未必是好事。 《The C++ Programming Language》/《C++程序设计语言》 最新版本:第三版特别版 简称TC++PL,有其他语言的丰富经验的。(也
  • c++学习资料汇总

    千次下载 热门讨论 2013-08-01 08:40:22
    包括: 高质量C++_C编程指南.pdf C+++Primer中文非扫描版.pdf C++程序员必备常识.pdf Effective C++.chm More+Exceptional+C++.chm The C++ Standard Library.chm
  • 提起c语言,很多人都说c语言属于比较难的编程语言,但是一些大型项目设计高复杂度和高要求的项目的时候,c语言还是有很大...如果大家对于学习C++有任何问题,学习方法,学习路线,如何学习有效率的问题,可以随时...
  • 转知乎,感觉非常棒,适合普通人c++学习路线图

    万次阅读 多人点赞 2018-04-12 15:17:33
    作者:刘凯新链接:https://www.zhihu.com/question/23447320/answer/39322848来源:知乎著作权... 我是一名自动化专业的学生,可是迷恋C++编程再加上购书癖,目前大约将国外经典C++书籍全部买完了,没有全部详细读...
  • C++学习52个经典网站

    万次阅读 多人点赞 2017-11-25 15:05:16
    C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以...
  • 2020最新版C/C++学习路线图--从C小白到C界精英

    千次阅读 多人点赞 2020-01-11 11:03:56
    黑马程序员C/C++学习路线图一共分为八个阶段的学习,从C/C++学习开发基础到C/C++学习项目实战。C/C++学习路线图第一阶段:C开发基础;C/C++学习路线图第二阶段:C高级编程;C/C++学习路线图第三阶段:C++核心编程与...
  • C++学习曲线

    千次阅读 2016-05-09 16:47:17
    C++缺点之一,是相对许多语言...个人认为,学习C++可分为4个层次: 第一层次,C++基础:挑选一本入门书籍,如《C++ Primer》、《C++大学教程》、或Stroustrup撰写的经典《C++程序设计语言》或他一年半前的新作《C+
  • C++学习推荐书籍

    千次阅读 2007-03-24 00:56:00
    以前有不少朋友问关于学习各种技术的推荐书籍的问题,这里把我觉得比较好的一些书籍列一下,希望能起到抛砖引玉的作用就好了:)C++C++ Primer,Thinking in C++,The Standard C++ Library,The C++ Programming ...
  • 如何下载Visual C++ 2010 学习版(即 Visual C++ 2010 Express)

    万次阅读 多人点赞 2019-03-31 16:51:53
    2018年全国计算机二级 C、C++两个科目的应用软件由 Visual C++6.0 改为 Visual C++ 2010 学习版(即 Visual C++ 2010 Express),这个软件的中文版怎么下呢? 1.打开Chrome浏览器 在网址一栏输入www.microsoft.com,...
  • c++学习资料汇总网站

    千次阅读 2019-02-13 09:29:41
    https://blog.csdn.net/sinyingaa/article/details/81603370

空空如也

1 2 3 4 5 ... 20
收藏数 2,833,128
精华内容 1,133,251
关键字:

c++学习

c++ 订阅