C++堆上指针new/delete,文件的读写----C++基础(第二期)

114 阅读5分钟

C++ 基础知识

数组与字符串

  • C++中数组初始化,定义与C一致。 C++11中数组初始化方法: int a[4]{1,2,3,4};(等号可省略)

  • C++中,对字符串而言,任意由空白(回车,空格,制表符)分隔的字符串常量都将自动拼成一个。

  • string类:(可以直接存储字符串,而C语言中str类型需要定义成char c[];才能存储字符串)

    1. 头文件#include<string>,命名空间为std,作用:定义字符串。

    2. string a="nasnssnnn",b="qqwssdds";------ 未初始化的string对象默认为0。String类可以直接将两字符串相加来达到字符串合并,如:a+b(nasnssnnnqqwssdds),也可以进行直接赋值。

    3. 获得字符串长度 a.size()------(a为string的一个对象,size()为string类的一个方法)。

    4. 对于未初始化的字符串,第一个‘\0’出现的位置是随机的,函数strlen()从数组的第一个元素开始计算字节数,直到遇见空字符。

    5. C++11字符串初始化:char a[]{“aasjjshx”};(等号可省略)

  • 原始字符串

    1. C++11中新增原始字符串,在原始字符串中,字符表示的就是自己本身,如\n不再表示换行符,而表示斜杠和n,原始字符串可直接使用”,因此原始字符串将“(和)”作为定界符,并使用前缀R来标识原始字符串。

    2. 例子:

      cout<<R"(jim "king" Tutt use \n instead ofendl)"<<endl;

      打印结果:jim "king" Tutt use \n instead ofendl

指针(new与delete)(动态空间)

  1. 空间申请: int *p= new int;

    空间归还: delete p;

    动态数组申请: int *p=new int[10];

    释放:delete []p;

C++中对指针解除引用意味着获得该指针指向的值。

模板类 vector

头文件:#include<vector>

vector类类似于string类,且是一种动态数组(向量),其中空间的申请和释放是自动完成的。

定义:vector<数组中数据的类型>变量名(数组元素个数);

该元素个数可以是变量,也可以是确定的常量。

例子:

#include<vector>
int n=100;
vector<char>value(n);  //定义动态数组value
value.push_back(b);    //数组尾部插入元素b
value.pop_back();    //删除数组尾部元素
value.front();    //返回value中第一个元素
value.back();    //返回数组value中最后一个元素
value.empty();    //判断数组value是不是为空
value.insert(value.begin()+i,b);    
//数组value中第i+1的位置上插入元素b
value.clear();   //清空数组所有元素
value.begin();    //指向数组开头的迭代器
value.end();    //指向数组末尾的迭代器
//末尾:指最后一个元素的下一个位置

C++11中新增类array类(储存在栈中);

头文件:#include<array>

定义:array<数据类型,元素个数(不能是变量)>数组名;

循环:

C++中允许这样做:  for(int a=0;a<10;a++)……

逻辑运算符:

&&,||,!  与它们对应的在C++中的另一种表达方式:and,or,not(关键字)

字符函数库cctype

头文件#include<cctype>

常用函数(value为一个字符串):

isalnum(value);是否只有字母或数字

isalpha(value); 是否只有字母

isdigit(value);是否只用数字

isspace(value);是否只有空格

tolower(value);将参数中的大写字符返回其小写字符,
               否则返回该参数
toupper(value);与上面相反

C++  简单的文件读写

文件相关基础:

文件流  头文件#include<fstream>-----(打开文件供读 写);#include<ofstream>-----(向已存在文件中写内容);#include<ifstream>-----(从已存在文件中读取内容);

文件写入类:ofstream   该类中有一个方法:.open(文件名或文件所在路径)

文件写入步骤:

1.包含头文件fstream   

2.创建一个ofstream的对象  

3.将该对象同一个文件关联起来(对象名.open(文件));

4.就像使用cout那样使用该ofstream的对象

使用完文件后,要关闭文件(对象名.close()) 。C++中,若使用文件后忘记关闭,程序结束时会自动关闭。

文件读出类 ifstream,文件读出步骤与写入类似(像使用cin那样使用ifstream的对象)。

对象名.open(文件名);

if (!对象名.is_open())    //判断文件是否成功打开 
{  
  exit(EXIT_FAILURE);  
  //exit()函数在cstdlib头文件中定义,该语句是用来终止程序的。 
}  
文件打开模式:

     ios::in          只读

     ios::out         只写

     ios::app         从文件末尾开始写,防止丢失文件中原来就有的内容

     ios::binary      二进制模式

     ios::nocreate    打开一个文件时,如果文件不存在,不创建文件

     ios::noreplace  打开一个文件时,如果文件不存在,创建 该文件

     ios::trunc     打开一个文件,然后清空内容

     ios::ate       打开一个文件时,将位置移动到文件尾

例子:

ofstream outfile("文件所在路径", ios::app);
//从文件末尾写入
文件指针位置在c++中的用法:

     ios::beg   文件头

     ios::end   文件尾

     ios::cur   当前位置

例子:

文件对象名.seekg(10,ios::cur);   
//让文件指针从当前位置向文件末方向移动10个字节
文件对象名.seekg(-10,ios::cur);   
//让文件指针从当前位置向文件开始方向移动10个字节
文件对象名.seekg(0,ios::end);   
//让文件指针定位到文件末尾
常用的错误判断方法:

    .good()  如果文件打开成功

    .bad()   如果打开文件时发生错误

    .eof()   如果已经到达文件尾