C/C++
pix_csdn
负重前行,向阳而生。
展开
-
main(int argc, char *argv[])
这是UNIX和Linux中的标准主函数.argc:用来统计运行时发送给main函数的命令行参数的个数; argv[ ]:其中每个元素都是上述参数(以字符串形式存储)的首地址; argv[0]指向程序运行的全路径名; argv[1]指向程序名后的第一个参数; argv[2]指向程序名后的第二个参数; ...... argv[argc]为NULL. 编译器生成的可执行文件...原创 2019-04-11 13:57:31 · 4649 阅读 · 0 评论 -
函数中的内存动态分配
动态分配使用不当会造成内存泄漏,这里分享一个最容易被忽略的内存泄漏现象。#include <iostream>char * func(void);intmain(){ char *pm = NULL; pm = func(); /* ** Do something */ return 0;}char * func(...原创 2019-04-20 16:20:32 · 943 阅读 · 0 评论 -
C++类的静态成员、静态成员函数、静态变量、常量、静态常量(C++primer,P428-P441总结)
类的静态成员与静态方法先讲一下类的静态成员与静态成员函数。类的静态成员作用:类对象之间共享数据。类对象与对象之间的成员变量是相互独立的,想要共享数据,则需要静态成员与静态方法(静态方法没太多必要)。使用静态成员注意事项:静态成员不存储在对象中,存储在静态区,编译时初始化;类中声明声明静态成员即可使用,不能类中初始化;静态成员初始化应该在类的方法文件中(cpp文件),且在构造函数之前...原创 2019-04-29 16:45:33 · 1081 阅读 · 0 评论 -
C++类的特殊成员函数(C++primer,P432)
C++自动提供了五个特殊成员函数(如果未自己定义)默认构造函数默认析构函数复制构造函数赋值运算符重载地址运算符重载复制构造函数与赋值运算符重载的应用情况:class A { ...}A a = {...};//调用复制构造函数A b(a);A c = a;//调用赋值运算符A d;d = a;在类成员变量中含有指针的情况下,必须自己提供类的复制构造函数、...原创 2019-04-29 17:46:05 · 317 阅读 · 0 评论 -
C++ 输入多个字符串,移位后再排序输出(正反排序都要输出)
输入多个字符串(EOF结束),移位后排序.eg:1 zxcvb //zxcvb循环右移1位2 asdfg3 qwert4 poiuyyt输出为://从小到大排序bzxcv //zxcvb循环右移1位的结果ertqwfgasd //asdfg循环右移两位的结果uyytpoi//从大到小排序uyytpoifgasdertqwbzxcv实现的程序如下:#in...原创 2019-05-05 15:26:31 · 1285 阅读 · 0 评论 -
C++作用域为类的常量、域内枚举(C++ primer,P371)
除了#define,有三种在类内声明常量的方式:const声明常量;类内声明一个枚举;指定底层实现(可以用short之类实现枚举);const声明常量const声明的常量在每个对象中都会存放一个备份(这是其缺陷);c++11之前,const声明常量时不能初始化,因为类只是描述对象的形式,没有创建对象;此时给出初始化的值,将无法存放。所以需要用初始化列表进行初始化。c++11之后,...原创 2019-04-29 20:26:57 · 396 阅读 · 0 评论 -
C++ STL之迭代器(C++ primer,P685)
泛型编程之迭代器头文件 < iterator >主要内容如下:泛型编程与面向对象编程什么是迭代器迭代器类型使用迭代器输入输出小技巧泛型编程与面向对象编程面向对象编程关注的是编程的数据方面,注重数据结构的重用与继承;泛型编程关注的是算法,注重在不同类型容器上算法的重用;两者共同特点是:抽象、创建可重用的代码。```模板使算法独立于存储的数据类型;迭代器使算...原创 2019-05-05 16:21:50 · 202 阅读 · 0 评论 -
C++ STL序列容器简介(C++ primer,P697)
STL序列容器简介包含以下内容:容器的概念序列容器的基本要求与可选要求几种序列容器特点与基本操作容器的概念STL具有容器概念和容器类型;容器概念是指具有名称(序列/关联容器)的通用类别;容器类型是指可用于创建具体容器对象的模板;所以,序列容器是一类容器类型的统称;容器是存储其它对象的对象,不能将任何数据类型存储到容器中。序列容器的基本要求与可选要求序列容器有七种:vec...原创 2019-05-05 19:30:24 · 317 阅读 · 0 评论 -
C++头文件包含的内容(C++primer:9.1,P301)
通常头文件包含以下内容:函数原型 #define定义的符号常量(最好检测#ifndef) const常量(const修饰变量为内部链接性) 结构/类声明 模板声明 内联函定义(重要,内联函数定义可以放在头文件)!!...原创 2019-05-05 19:35:36 · 155 阅读 · 0 评论 -
C++存储说明符与限定符(c++primer:9.2.7,P317)
存储说明符的种类:autoregisterstaticexternthread_localmutableautoauto的便利性在于STL库中一些变量的声明,下面这个例子itva与itvb的声明方式立显auto的便利性。//声明一个vector<vector<int>>的容器 std::vector<vector<int>> ...原创 2019-04-25 15:44:18 · 129 阅读 · 0 评论 -
istream_iterator与ostream_iterator
注意点:istream_iterator // 执行此句时会等待一个输入 istream_iterator<int> iptr(cin), eof; // 执行此句后,相当于再等待一个新的输入 iptr++;ostream_iterator // 执行此句时不会产生输出 // 需要一个输出的类型转换 // int → char 等 ostream_ite...原创 2019-05-08 17:05:45 · 277 阅读 · 0 评论 -
C++动态分配new(C++ primer,P320)
主要包含一下几部分内容后续可能会再补充new分配内存块的来源new时初始化new失败时new运算符、函数、替换函数定位new运算符定位new的重载new分配内存块的来源C++ primer plus书中P321页说,new负责在堆(heap)中找到一个足以能够满足要求的内存块。但更多的文章都说new从自由存储区(free store)上为对象动态分配内存空间;找到一个相对...原创 2019-04-25 18:26:30 · 260 阅读 · 0 评论 -
C++虚函数、虚表、动态绑定(C++ primer,P504)
动态联编:编译器生成能在程序运行时选择正确虚方法的代码。类的虚表编译器在编译阶段会为每个类创建一个虚表,表中依次存放类中虚函数的地址;也就是虚表的创建与赋值是在编译阶段进行;每个类只有唯一的一个虚表;用类名创建对象时,若有虚函数,对象中会包含一个指针(*__vptr)指向虚表;虚函数动态绑定原理class A {public: virtual void vfunc(); v...原创 2019-04-30 18:54:34 · 513 阅读 · 0 评论 -
C++ STL之关联容器(C++ primer,P702)
关联容器将 value(值)与 key(键)关联在一起,并使用 key 来查找 value;关联容器的优势是,提供元素的快速访问,也允许插入元素(但是不能固定位置插入)STL提供了四种有序关联容器:(底层都是树)set: 集合,key 唯一且 key 就是 valuemultiset: key 不唯一map: key 与 value 不同,key 唯一multimap: key 不唯...原创 2019-05-06 12:32:37 · 189 阅读 · 0 评论 -
C++ STL之函数对象/函数符(C++ primer,P707)
主要内容:函数符的概念预定义的函数符函数符的概念函数符是可以以函数的方式与 () 结合使用的任意对象(此处对象不仅指类对象);函数名、指针、重载了 () 运算符的类对象都是函数符;函数符概念:生成器:不用参数即可调用的函数符;一元函数:用一个参数就能调用的函数符;二元函数:用两个参数可以调用的函数符;谓词:返回 bool 值的一元函数;二元谓词:返回 bool 值的二元...原创 2019-05-06 12:50:34 · 271 阅读 · 0 评论 -
函数实例化应用
mark一段函数模板实例化应用的例子:#include <iostream>#include <string>#include <vector>#include <algorithm>template<typename T>void output(T str);int main(){ using std::string...原创 2019-05-09 11:45:21 · 526 阅读 · 0 评论 -
C++ STL之算法(C++ primer,P713)
主要包含一下内容:算法分类函数与容器方法函数简介案例:统计单词个数原创 2019-05-06 18:24:31 · 371 阅读 · 0 评论 -
C++友元函数、运算符重载(C++ primer,P381)
主要介绍以下几点:类友元函数的创建方式;运算符重载的限制;如何重载运算符(以 + 为例);运算符重载与友元函数;( << )运算符的重载;类的友元函数通常来说,外部实现对类私有成员的访问,只能通过类的公有方法,然而友元提供了另一用方法。友元函数友元类友元成员函数创建类的友元class A{ private: ... public:...原创 2019-04-28 20:28:17 · 342 阅读 · 0 评论 -
C++ RTTI(C++ primer,P642)
RTTI用途RTTI是运行阶段类型识别的简称。dynamic_cast与bad_cast异常若pt指向的类为Type类或者Type的直接/间接派生类,则返回type*型指针;否则返回nullptr指针。dynamic_cast<Type*>(pt);若试图引用返回的nullptr指针,则会出现bad_cast异常(异常定义在头文件 < typeinfo > 中...原创 2019-05-03 22:07:40 · 150 阅读 · 0 评论 -
C++ expection异常类、捕获所有异常(C++ primer,P639)
expection类头文件 < expection >stdexcept类(C++ primer plus,P632)包含以下异常:domain_errorinvalid_argumentlength_errorout_of_boundsrange_erroroverflow_errorunderflow_errorbad_alloc类包含以下异常:b...原创 2019-05-03 21:27:27 · 5531 阅读 · 0 评论 -
多线程编程
先mark一个地址,有空试一试.https://blog.csdn.net/oqqENvY12/article/details/88593322转载 2019-04-11 14:00:49 · 132 阅读 · 0 评论 -
16/32/64位系统下各种数据类型所占字节的大小
首先强调一点,char, short, float, double在各个系统中字节数都一样 16位系统 32位系统 64位系统 char 1 1 1 short 2 2 2 float 4 4 4 double 8 8 8 lon...原创 2019-04-11 14:58:10 · 3164 阅读 · 0 评论 -
当 sizeof() 遇到 struct{} 和 class{}
sizeof基本的用法这里就不说的,无非是确定对象什么时候是指针; 什么时候是数组; 16位/32位/64位机器中int,long,指针的大小;这一篇主要介绍sizeof(结构体)以及sizeof(类)的计算方法:sizeof(结构体) 麻烦的原因 计算机系统的字节对齐(为了快速读写数据) static静态变量 不同位系统下int,long,指针的大小 计...原创 2019-04-11 19:59:53 · 317 阅读 · 0 评论 -
C/C++之空数组(未完结)
通常来说一个长度为0的数组我们称之为空数组,其包含元素的个数为0。作用:假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对返回数组进一步处理,而如果返回空数组,则无须null引用检查。鉴于此,返回数组的方法在没有结果时我们通常返回空数组,而不是null,这样处理比较方便。 在函数中定义空数组没有任何的意义,它指向上一个定义的变量。 在结构体中,可...原创 2019-04-11 21:12:46 · 2806 阅读 · 0 评论 -
C++中的sizeof()用法
1.是什么sizeof()是什么呢?是一个函数吗?其实sizeof是C++中的关键字,神奇吧。看一下百度上对sizeof的解释:返回类型名或表达式具有的类型对应的大小。C++11新增支持直接对类的数据成员作为操作数(之前无法使用)。sizeof的操作数是不被求值的,利用这一点可以配合模版元编程测试类型正确性。通常来说,为了不出错,还是用sizeof()的形式。(因为c++对size...原创 2019-04-12 14:30:09 · 1048 阅读 · 0 评论 -
C++枚举类型及其使用
先mark一个链接,有空再去看看吧。见到好的例子用枚举试试,这个例子太杂乱了。http://www.runoob.com/w3cnote/cpp-enum-intro.html转载 2019-04-12 14:38:20 · 4104 阅读 · 0 评论 -
C++正则表达式匹配
好难懂,先mark一下,有空回来慢慢啃。https://blog.csdn.net/qq_34802416/article/details/79307102#1__5转载 2019-04-13 14:28:48 · 341 阅读 · 0 评论 -
C++名空间(C++primer,P324)
关于名空间需要注意的几点using声明与using编译名空间嵌套、使用未命名的名空间名空间的使用原则using声明与using编译名空间的声明:相当与声明了一个cin的函数;using std::cin;名空间的定义:相当于把导入名空间中所有的函数、变量等using namespace std;通常来说,使用using声明比使用using编译要好;在代码块内使用名空间...原创 2019-04-25 19:09:56 · 121 阅读 · 0 评论 -
C++函数模板相关、具体化、实例化(C++ primer,P281)
此篇只讲函数模板,主要有一下几点:模板的编译函数的具体化编译器如何选择函数的版本何为最具体decltype与后置返回类型模板的编译编译生成的最终代码并不会包含函数模板,也就是函数模板无法减少程序的代码量,它主要的功能是泛型编程,编写一个通用的函数/类/等,减少编程的工作量。当模板函数遇到int型参数时,编译器会编译出一个int版本的函数;同理,当遇到double类型时,会生成d...原创 2019-04-25 20:44:55 · 303 阅读 · 0 评论 -
const,static,extern存储区域+创建/销毁时间+作用域
文章结构如下:进程的内存空间布局; 变量的链接属性; 变量的作用域与存储类型; const,static,entern存储区域,创建/消亡时间总结。1.进程的内存空间分布可执行文件加载进内存后形成的进程在内存中的结构,从不同数据上看到了两种:第一种自下向上为:代码区、数据区+BSS区、堆区、栈区;第二种自下向上为:代码区、常量区、静态/全局区、堆区、栈区;个人认为这两种...原创 2019-04-15 10:41:04 · 582 阅读 · 0 评论 -
C++类的构造函数与析构函数(一)(C++ primer,P352)
类、对象、成员、成员函数(方法)对象是类的一个实体;成员是类中的变量;方法是成员函数;(好像一般java中喜欢叫函数为方法)构造函数与默认构造函数、类的const成员函数构造函数应放在类的public部分;构造函数和类名相同;构造函数无返回类型;构造函数的参数名(形参)不能与类的成员名相同,否则函数的形参将会隐藏成员,无法赋值;若没声明构造函数,系统提供默认构造函数;若已声明...原创 2019-04-26 22:21:33 · 204 阅读 · 0 评论 -
C++ valarray模板使用方法
暂时还未整理完,可以先参考:cplusplus.com原创 2019-05-01 21:33:05 · 340 阅读 · 0 评论 -
C++抽象基类与虚基类(C++ primer)
c++ primer plus P508,抽象基类c++ primer plus P556,虚基类抽象基类(abstract base class,ABC)抽象基类是解决如下问题:加入现在需要开发一个图形类,表示圆与椭圆(注意,圆是一种特殊的椭圆)。所以初步考虑从椭圆类中派生出圆类。但是现在遇到一个问题,圆与椭圆的面积计算公式不同,所以需要建立一个ABC,抽象出圆与椭圆的共性,圆类、椭圆类...原创 2019-05-02 15:18:35 · 2797 阅读 · 3 评论 -
C++继承、动态内存分配(C++ primer)
c++ primer plus P516,继承与动态内存分配继承与动态内存分配继承时派生类不使用new,则无需重新定义构造函数、析构函数、复制构造函数、重载赋值运算符;继承时派生类使用new进行动态内存分配:需要显式的定义析构函数复制构造函数赋值运算符重载(需要先判断是不是this指针,再delete原动态内存分配,最后分配内存)何时调用复制构造函数将新对象初始化为一个同类...原创 2019-05-02 15:37:28 · 184 阅读 · 0 评论 -
C++中abort()与exit()(C++ primer,P617)
abort()属于异常退出;直接终止进程,不做任何处理,没有任何返回值;不是返回到main();exit(…)属于正常退出;可以返回参数,exit( 0 );终止进程前会释放变量、缓存、关闭I/O等操作;...原创 2019-05-03 20:36:48 · 500 阅读 · 0 评论 -
C++异常机制、try、catch、throw(C++ primer,P619)
throw通常用if()语句判断先决条件,如果会出现异常,则利用throw语句抛出异常类型;异常类中的异常可以不自己使用throw语句;//例如我要 计算(a+b)的倒数,需要判断a+b是否为0if(a == -b) throw "this is an exception";try{…}程序块try{//此处执行异常处理的相关语句...}执行程序块中的程序,如果出现异常(...原创 2019-05-03 21:10:58 · 156 阅读 · 0 评论 -
Linux系统中GDB + gcc 使用方法
GDB用法简单使用被调试程序简单使用被调试程序#include <stdio.h>int func(int n);int main() { int i; long result = 0; for (i = 1; i < 100; ++i) result += i; printf("result[1-99] = %d \n", result); pr...原创 2019-05-12 15:41:13 · 357 阅读 · 0 评论