zoukankan      html  css  js  c++  java
  • C++笔记(1)

    C++笔记1文件与流笔记

    参考博客:

    https://blog.csdn.net/kingstar158/article/details/6859379

     
       

    关闭文件中:

    当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程所访问了。为防止流对象被销毁时还联系着打开的文件,析构函数将会自动调用关闭函数close。

    插入操作符:<<(进行了重载)

    成员函数:eof ,它是ifstream 从类 ios 中继承过来的,当到达文件末尾时返回true

    状态标志符的验证(Verification of state flags)

    除了eof()以外,还有一些验证流的状态的成员函数(所有都返回bool型返回值):

    要想重置这些成员函数所检查的状态标志,使用成员函数clear(),没有参数。

    流指针 get 和 put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本模式的文件中某些特殊字符可能被修改。由于这个原因,建议对以文本文件模式打开的文件总是使用seekg 和 seekp的第一种原型,而且不要对tellg 或 tellp 的返回值进行修改。

     

    缓存和同步(Buffers and Synchronization)

    当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。

    当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:

    当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。

    当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。

    控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。

    明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

     

    句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

     

     

     

    C++笔记2——vector类

    .它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的

    首先在程序开头处加上#include<vector>以包含所需要的类文件vector

     

     

     

     

    C++笔记3——string类

    C++ string append()添加文本

    使用append()添加文本常用方法:

    直接添加另一个完整的字符串:

    如str1.append(str2);

    添加另一个字符串的某一段子串:

    如str1.append(str2, 11, 7);

    添加几个相同的字符:

    如str1.append(5, '.');

    注意,个数在前字符在后.上面的代码意思为在str1后面添加5个".".

    标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。

    1. c_str():生成一个const char*指针,指向以空字符终止的数组。

    assign方法可以理解为先将原字符串清空,然后赋予新的值作替换。

    1. c_str():生成一个const char*指针,指向以空字符终止的数组。

    注:

    ①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例:

    ② c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。

     

    C++笔记4——用 _findfirst 和 _findnext 查找文件

    http://www.cnblogs.com/ranjiewen/p/5960976.html

    一、这两个函数均在io.h里面。

    二、首先了解一下一个文件结构体:

    struct _finddata_t {

        unsigned    attrib;

        time_t      time_create;   

        time_t      time_access;   

        time_t      time_write;

        _fsize_t    size;

        char        name[260];

    };

    time_t,其实就是long

    而_fsize_t,就是unsigned long

    现在来解释一下结构体的数据成员吧。 

    attrib,就是所查找文件的属性:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、 _A_SUBDIR(文件夹)、_A_SYSTEM(系统)。

    time_create、time_access和time_write分别是创建文件的时间、最后一次访问文件的时间和文件最后被修改的时间。

    size:文件大小

    name:文件名。

    三、用 _findfirst 和 _findnext 查找文件

     

    1、_findfirst函数:long _findfirst(const char *, struct _finddata_t *);

     

    第一个参数为文件名,可以用"*.*"来查找所有文件,也可以用"*.cpp"来查找.cpp文件。第二个参数是_finddata_t结构体指针。若查找成功,返回文件句柄,若失败,返回-1。

    2、_findnext函数:int _findnext(long, struct _finddata_t *);

    第一个参数为文件句柄,第二个参数同样为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。

    3、_findclose()函数:int _findclose(long);

    只有一个参数,文件句柄。若关闭成功返回0,失败返回-1。

    //遍历文件夹及其子文件夹下所有文件。操作系统中文件夹目录是树状结构,使用深度搜索策略遍历所有文件。用到_A_SUBDIR属性

    //在判断有无子目录的if分支中,由于系统在进入一个子目录时,匹配到的头两个文件(夹)是"."(当前目录),".."(上一层目录)。

    //需要忽略掉这两种情况。当需要对遍历到的文件做处理时,在else分支中添加相应的代码就好

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    python有哪些好的学习资料或者博客?
    运维角度浅谈MySQL数据库优化
    MySQL高可用性之Keepalived+Mysql(双主热备)
    Python 开发者节省时间的 10 个小技巧
    PHP 加密的几种方式
    17种常用的jQuery全屏焦点图代码
    13种酷炫的html5 3D图片切换代码
    14款微信小游戏源码下载
    Ext js框架模拟Windows桌面菜单管理模板
    10款 非常酷炫的网站首页焦点图 兼容ie浏览器
  • 原文地址:https://www.cnblogs.com/HelenL/p/8648601.html
Copyright © 2011-2022 走看看