
C/C++
Captain_zw
这个作者很懒,什么都没留下…
展开
-
【C/C++】auto关键字的使用
一、C++98 auto早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期:int a =10 ; //拥有自动生命期auto int b = 20 ; //拥有自动生命期static int c = 30 ; //延长了生命期C++98中的auto多余且极少使用,C++11已经删除了这一用法,取而代之的是全新的auto:变量的自动类型推断。转载 2020-06-16 11:00:20 · 693 阅读 · 0 评论 -
【C/C++】C语言中的__FILE__、__LINE__、#line、__func__关键字的作用
1、__FILE__用于指示本行语句所在源文件的文件名,如下(test.c):#include <stdio.h>void main(){ printf("%s\n", __FILE__);}=====>>GCC编译执行结果为:=====>> "test.c"=====>>Windows的VC6.0编译执行结果为:=====>> "c:\documents and settings\administrator\桌面\t原创 2020-06-02 15:55:59 · 1528 阅读 · 0 评论 -
【C/C++】scanf()、gets()、getchar()、getline()、cin.getine()、cin.get()处理输入流的区别
一、具体功能及区别1、scanf()scanf()函数用来接收多种格式的数据,不可以接收空格,遇到回车默认输入结束(不能处理回车符,将其看作再次输入的字符)。//不可接收空格//在控制台中输入“Hello World”时,char_array的值是Hellochar array[20] = {0};scanf("%s", array);//遇到回车默认输入结束,且将回车作为下一次输入的字符//在控制台中输入数字“5”然后按下回车键,此时ret_int的值是5,而ret_char的值原创 2020-06-02 14:48:07 · 838 阅读 · 0 评论 -
【C/C++】解决“两个类的头文件相互引用/超前引用”问题的方法
一、什么是超前引用?所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。一般情况下C/C++要求所有的类型必须在使用前被定义,但是会存在一些特殊情况导致这种要求无法满足,例如//类A的头文件#ifndef _A_H_#define _A_H_#include "B.h"class A{public: int x; B b;}#enif//类B的头文件#ifndef _B_H_#define _B_H_#include "A.h"class ..原创 2020-05-29 22:38:30 · 4956 阅读 · 2 评论 -
【C/C++】fstream详解
一、C/C++对文件操作的实现C中对文件的操作是通过 FILE文件指针 和相关关函数来实现的。C++中是通过 fstream文件流来实现的,其包含ifstream、ofstream、fstream 三个类,通过定义这三个类的对象实现相对应的文件操作。二、C中的文件操作1、打开文件包括fopen()、freopen()、tmpfile() 三个函数,他们都会返回一个指向 FILE 对象的指针。该 FILE 对象包控制被打开文件相关联的流的所有信息,包括指向缓冲区的指针、文件位置指示器...原创 2020-05-28 20:51:34 · 9749 阅读 · 0 评论 -
【C/C++】拷贝构造函数——深拷贝和浅拷贝
一、拷贝构造函数1、构造函数用于初始化对象中的数据成员,无返回值类型并禁用return语句; 构造函数可以重载,因此一个类中可以有多个构造函数; 当类中显式的声明了构造函数后,不管该构造函数是否有参数,系统不会再生成默认的无参构造函数;2、拷贝构造函数负责由已知对象拷贝出新对象,其参数要求是一个类对象的const引用; 若类中未显式的声明拷贝构造函数,系统会自动生成一个默认的拷贝构造函数,并将类中所有的数据成员做浅拷贝; 当类中成员要做深拷贝时,默认的拷贝构造函数无用拷贝构造函数的.原创 2020-05-20 12:04:29 · 921 阅读 · 0 评论 -
【C/C++】String自带函数的使用
一、String的自带函数assign():为字符串赋值 append():向尾部追加字符串 at(index):返回当前字符串中index位置的字符 clear():清空字符串 erase(index, n):删除字符串从index开始的n个字符 empty():检测字符串是否为空 compare():比较字符串 substr():获取子串 find():函数可以在一个字符串中搜索一个子串或者一个字符 insert():将某个字符/字符串插入到当前字符串的某个位置 replace(原创 2020-05-20 11:35:20 · 1220 阅读 · 0 评论 -
【C/C++】部分库函数整理
C++库函数查漏补缺string s2(s1, x, y);从s的x位置开始,连续y个字符赋值给s2if(str.find(“xxx”) != string::npos);string类提供了六种查找函数,每种函数以不同形式的 find 命名,这些操作全都制返回 string::size_type 类型的值,以下标形式标记查找匹配所发生的位置;或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。 即字符串str中不存在字符串 “xxx”**int sigac原创 2020-05-14 22:10:44 · 288 阅读 · 0 评论 -
【C/C++】getline函数详解
为什么需要getline函数?虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题。当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符); 一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例,可以输入 "Mark" 或 "Twain",但不能输入 "Mark Twa...原创 2019-10-29 16:08:24 · 411 阅读 · 0 评论 -
【C/C++】istringstream的使用
istringstream的功能与使用C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入...原创 2019-10-29 15:18:09 · 650 阅读 · 1 评论 -
【C/C++】二维Vector的初始化方法
二维Vector的初始化方法详见代码:方法一:#include<iostream>#include<vector>void main(){ int a = 2; int b = 4; //初始化方法1 //std::vector<std::vector<int>> vec(a, std::vect...原创 2019-09-29 10:59:23 · 23488 阅读 · 0 评论 -
【C/C++】如何清空Vector内的所有元素
如何清空Vector内的所有元素声明如下:int i, j;vector <int> vecInt;for (int i=0;i<500;i++){ vecInt.push_back(i);}j = vecInt.capacity(); //j=512i = vecInt.size(); //i=500 方法一:使用 clear...原创 2019-09-29 09:52:50 · 32631 阅读 · 0 评论 -
【C/C++】Vector如何获取最后一个元素
C++ 获取vector容器最后一个元素声明:vector<T> vec;方法如下://方法一: return vec.at(vec.size()-1);//方法二: return vec.back();//方法三: return vec.end()-1; //注意:end指向末尾元素的下一个元素。//方法四: return vec.rbeg...原创 2019-09-27 15:09:42 · 52537 阅读 · 2 评论 -
【C/C++】template 函数模板/类模板
C++模板模板(Template)指C++程序设计语言中的函数模板与类模板,是一种参数化类型机制,是C++泛型编程中不可缺少的一部分。模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。typename关键字有两个用途:1、常见的在模板定义中的模板形参列表,表示一个模板参数是类型参数。等同于使用class。 2、使用模板类内定义...原创 2019-09-17 15:52:29 · 1682 阅读 · 0 评论 -
【C/C++】STL中 hash_map 的调用
注意:1、需要加上头文件#include<ext/hash_map> 2、需要加上名称空间using namespace __gnu_cxx; 3、当hash_map中使用 string 或者 long long 为key时(key为int时不需要),需用户扩展命名空间代码示例:#include<bits/stdc++.h>#include<ext/...原创 2019-09-17 14:52:28 · 206 阅读 · 0 评论 -
【C++】STL中“map”用法详解
1、map简介map是STL的一类关联式容器,提供一对一(其中第一个称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,其特点是增加和删除节点对迭代器的影响很小,除了操作节点,对其他的节点都没有什么影响。map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以map内部所有的数据都是有序的。2、map的声明与构造...原创 2019-04-08 16:43:04 · 891 阅读 · 0 评论 -
【C/C++】类和对象
一、类和对象的定义C++中对象的类型称为类(class),类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类的声明格式:class 类名{public: 公用的数据和成员函数;private: 私有的数据和成员函数;protected: 受保护的数据和成员函数;};类中private(私有)和publi...原创 2019-04-09 17:00:09 · 313 阅读 · 0 评论 -
【C/C++】数组定义及初始化
一、一维数组静态 int array[100]; //定义了数组array,并未对数组进行初始化 静态int array[100] = {1,2}; //定义并初始化了数组array 动态int* array = new int[100]; delete []array; //分配了长度为100的数组array 动态int* array = new int[100](1...原创 2019-04-23 10:16:31 · 1838 阅读 · 0 评论 -
【C/C++】字符串函数之复制函数
C/C++字符串复制函数:C/C++字符串函数的头文件:string.h复制函数主要有4个,如下:1、char * strcpy(char* destination,const char * source); 2、char* strncpy(char* destination,const char* source,size_t num); 3、void * memcpy(void*...原创 2019-04-30 16:54:29 · 21528 阅读 · 0 评论 -
【C/C++】Vector的创建与初始化方法
方法一: vector<int> list1;默认初始化,vector 为空, size 为0。容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。方法二: vector<int> list2(list); vector<int> l...原创 2019-06-14 16:21:01 · 65114 阅读 · 7 评论 -
【C/C++】STL中哈希表 hash_map 介绍
Background—为什么需要hash_map?用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息...转载 2019-09-15 23:07:18 · 426 阅读 · 0 评论 -
【C/C++】理解复杂函数声明
理解复杂声明可用的“右左法则”:从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向; 括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完。举例分析:int (*func)(int *p);1、首先找到变量名func,外面有一对圆括号,而且左边是一个*号,这说明func是一个指针;2、然后跳出这个圆括号,先看右边,又遇到圆括号,这说明 (*fu...原创 2019-09-16 09:07:03 · 549 阅读 · 0 评论 -
【C/C++】typedef用法详解
typedef 声明,简称 typedef,人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。一、typedef的四个用途1.1、用途一:定义一种类型易于记忆的别名,而不只是简单的宏替换。a...原创 2019-09-16 11:54:39 · 5567 阅读 · 0 评论 -
【C/C++】size_t详解
前言:使用size_t可能会提高代码的可移植性、有效性或者可读性,或许同时提高这三者。在标准C/C++的语法中,只有int、float、char、bool等基本的数据类型,至于 size_t 或 size_type 都是以后的编程人员为了方便记忆所定义的一些便于理解的由基本数据类型的变体类型。一、实现size_t是标准C库中定义的,它是一个基本的与机器相关的无符号整数的C/C + ...原创 2019-09-16 13:50:53 · 84770 阅读 · 8 评论 -
【C/C++】struct结构体声明中的冒号
struct结构体中的“位域”或“位段”有些信息在存储时,并不需要占用一个完整的字节而只需占几个或一个二进制位,如协议包头。因此为了节省存储空间并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用固定字节的二进制位域来表示。...原创 2019-09-16 16:13:10 · 1519 阅读 · 0 评论 -
【C/C++】C++中冒号 “ : ” 和双冒号 “ :: ” 的用法
一、冒号 “ : ” 的用法1.1、位域定义结构体内位域的定义,即该变量占几个bit空间typedef struct _XXX{ unsigned char a:4; //位域,a只占4 bit unsigned char c;}XXX;1.2、类构造函数的初始化列表构造函数就是与类同名的函数,它与普通函数的区别在于没有返回类型。在构造函数后面紧跟着冒号加...原创 2019-09-16 17:14:31 · 5644 阅读 · 0 评论 -
【C/C++】类继承中的赋值兼容原则,以及构造与析构
一、类的赋值兼容原则1.1、类型(赋值)兼容性原则的说明:需要基类对象的任何地方,都可以用公有派生类对象代替。通过公有继承,派生类得到了基类中除构造函数和析构函数以外的所有成员。实际上,公有派生类实际具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。1.2、类型(赋值)兼容性原则可以代替的情况:1)子类对象可以当作父类的对象使用(子类是特殊的父类) 2)子类对象...原创 2019-09-17 11:05:41 · 2182 阅读 · 0 评论 -
【C/C++】const char *、char const * 与 char const * 的区别
c/c++关于三者的定义方式:const char * ptr char const * ptr char * const ptr const关键字本身用于它限定一个变量不允许被改变,产生静态作用。1、const char * ptr / char const * ptr 这两种用法的效果相同,都是用于定义一个指向字符常量的指针。ptr在这里指向 char * 类...原创 2019-04-08 13:35:12 · 933 阅读 · 0 评论