C++学习总结2

链接上一篇日志,下面介绍下C++里面的其他内容

补充上一届里面的异常处理代码:

    try
    {
        cout << "try num" << endl;
        throw 1.5;
    }
    catch (double i)
    {
        cout << "catch try num double 1.5" << endl;
        cout << i << endl;
    }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

八、结构体与联合体

struct Date
{
    int year;
    int month;
    int day;
};
 
Date catch_today()
{
    Date oneday;
    cin >>oneday.year >> oneday.month >> oneday.day;
    return oneday;
}
 
void show(Date oneday)
{
    cout << oneday.year << "  " << oneday.month << "  "<< oneday.day << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
    Date date = catch_today();
    show(date);
    return 0;
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

上例中,我们将函数的返回值定义为结构体类型,同时,将结构体传递给一个函数的形参。当然,我们也可以把一个结构体内部的部分变量传递给一个函数,作为它的形参。

结构体与指针:
结构体变量指针,用它来访问它所指向的结构体变量的所有成员。或者说是,结构体指针变量。
使用方法:
*p - >  变量成员。
(*p). 变量成员。
void update (s_time *timer);
调用: update(&system);
结构体与引用 :
结构体类型名 & 引用变量名。
结构体引用变量.成员名。
test _struct &func(test_struct &var);
{};
调用  : k=func(b);
位域:
struct test
{
    unsigned int  a:3;
    unsigned int b:4;
    unsigned int c:5;
    unsigened int d:1;
};
联合体:
union band
{
    int  b1;
    char b2;
    long b3;
};

联合体:共有一块内存,其首地址一样。一般用于字节流传输的过程中,进行对齐的时候用。

九、文件

文件:数据的集合。计算机处理的数据只有以文件的形式存储到磁盘中才能永久的保持下来。
文件的分类:
依据数据的存储格式:文本文件与二进制文件。
文本文件:又称为asc码形式或者字符形式,就是将所有数据当作字符来进行存储。
二进制文件:按照二进制编码来存储数据的方式,主要用来加密。
依据文件的存取方式:顺序文件与随机文件。
顺序文件:只能进行顺序地读取、改写文件中的数据。 有权限命令,w,r。我们一般就是用此。
随机文件: 不管以什么方式打开的文件,都可以写入或者读取文件中的数据。
C++中,不区分随机存取与顺序存取。
文件流:
C++中一般用文件流类来处理文件的输入与输出。
文件流就是 字符流与二进制流。
处理流程:
1、打开一个文件,将一个文件流对象与某个磁盘文件联系起来。
2、使用文件流对象的成员函数,从文件中读取数据,或将数据写入到文件中去。
3、关闭文件,方便别的程序执行相关的操作。
文件流对象:
主要有三类:
输入流 :ifstream
输出流:ofstream  将数据流写入到文件中去,也就是说,这个的视角是文件。。。
输入/输出流:fstream
文件的打开与关闭:
打开文件的作用是在内存中建立文件的各种有关的信息,同时让文件流对象与该文件相关联。
关闭文件的作用是断开文件流对象与文件之间的联系。
1、打开文件
      1)定义流对象,然后将其打开
    ifstream inf;
  ofstream outf;
  fstream iof;
利用成员函数open()打开文件,从而将文件与流联系起来。
inf.open(const char *filename,int  fliemode ,int access);
     2)通过构造函数打开
ofstream outf(const char *filename,int filemode,int access);
其中,filename是我们准备打开文件的名称,也可以是路径名称,如c:\\data\\data.dat
filemode 是打开的模式。
ios::in  按照读的方式打开文件。ios ::out 按照写的方式打开文件。 ios::app 按照追加的方式打开文件。ios::binary按照二进制方式存取文件
包含头文件 《fstream》
这个头文件中包含了以上三个类,ifstream  ofstream iostream 。他们是从istream ostream iofstream 派生而来,而此三个,也是从ios派生来的,所以,ifstream  ofstream iofstream可以访问ios所定义的所有操作。
acces 属性列表:
0:普通文件
1:只读文件
2:隐含文件
4:系统文件
8:备份文件
  3)判断文件是否打开
ifstream file1("d:\\file.dat");
if(!file1) //file1.fail()
{
   cout << "打开文件失败"<<endl;
}
2、关闭文件
close();
outf.close();
文件流成员函数:
几个常用 的成员函数介绍:
read() ,write()
此函数是用来读写二进制文件的。
open()把没有初始化的对象与文件关联起来。
put() 输出流,输出单个字符。
eof() 用于判断是否达到了文件末尾
ignore(20,“ ”)读取了20个字符并忽略空格。
peek()获取输入流中的下一个字符。
flush()刷新流 ,这个好处是为了防止数据丢失。因为我们再执行输出操作时候,数据先存在一个缓冲区当中,然后当其满的时候,才会写到磁盘上,所以,需要时常刷新操作,然后将数据写进磁盘中。
ofstream类
   主要是将流数据写入到磁盘文件中,我们可以使用它来创建一个新文件,并且将数据写入到一个现有文件中。也可以追加一部分数据到文件中去。
ofstream outfile("example.txt");
outfile << "this is a ";
ofstream outfile("example.txt",ios::app);
outfile << "this is b";
1、追加文件
#include <iostream>
#include <fsteam>
using namespace std;
int main()
{
    cout << "打开输出流文件"<<endl;
    ofstream outfile("example.txt",ios::app);
   if(!outfile.fail())
    {
        cout<<“追加到”<<endl;
        outfile << ", i  think !";
    }
else
       cout << "无法打开文件" << endl;
    return 0;
}
ifsream类
从磁盘文件中读取数据。
输入流对象,读取数据。
文件随机访问
对于文件的随机访问,一般先找到那个要读写的位置,然后在调用文件读写函数读出或者写入数据。
实例:将2-200之间的偶数写入到一个二进制文件中,同时读取10-19之间的十个偶数。

int i,j;
 ofstream outfile("test1.dat",ios::binary| ios::out);
   if(outfile.fail())
  cout << "打开文件失败"<<endl;
   for(i=2;i<200;i+=2)
  outfile.write((char* )&i,sizeof(int));
  outfile.close();
ifstream infile("test1.dat",ios::binary|ios::in);
if(infile.fail())
  cout << "打开文件失败"<<endl;
infile.seekg(20*sizeof(int));//移动文件夹指针
for(i=0;i<10&&infile.eof();i++)
 {
     infile.read((char*)&j,sizeof(int));
    cout << j <<endl;
} 
 infile.close();

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

解析形如: 116.111,120,2344,22222   一行行的文件  文本文件

DWORD WINAPI ChildFunc1(LPVOID p)
{

    ifstream fin("read.txt");
    string line,temp; //line每一行的数据量,temp为临时加载的数据
    HANDLE hEvent;
    hEvent = OpenEventW(EVENT_ALL_ACCESS,FALSE,_T("ChildEvent1"));
    int countnum = 0;
    while(getline(fin,line))//文件没到结尾
    {

        countnum ++ ;
        if (countnum == 4)
        {
            countnum = 0;

        //八线激光雷达两帧为一周期
            if (recvcount1 == 6)
            {
                recvcount1 = 0;
            }
        int strnum = 0;
        for (int i = 0; i < line.size(); ++i)
        {
            if (line[i] == ‘,‘ )
            {
                stringstream stream;
                stream << temp;//temp需要清零
                switch(strnum)
                {
                    case 0: stream >> szBuffer1[recvcount1].lon;stream.str("");temp = "";break;
                    case 1: stream >> szBuffer1[recvcount1].lat;stream.str("");temp = "";break;
                    case 2: stream >> szBuffer1[recvcount1].speed;stream.str("");temp = "";break;
                    default:break;
                }
              strnum++;
            }
            else
            {
               temp += line[i];
            }
            if (i == line.size()-1)
            {
                stringstream stream;
                stream << temp;//temp需要清零
                stream >> szBuffer1[recvcount1].pathAngle;
                stream.str("");
                temp = "";
            }
        }
        cout << "flag1:  "<<recvcount1<<endl;
        recvcount1++;
        SetEvent(hEvent);
        Sleep(200);
      }
    }
    return 0;
}
 
解析二进制文件:读取某一个结构体
DWORD WINAPI ChildFunc(LPVOID p)
{
    FILE *infile = fopen("data.txt","rb"); 
    long i = 0;
 
    HANDLE hEvent;
    hEvent = OpenEventW(EVENT_ALL_ACCESS,FALSE,_T("ChildEvent"));
 
    while(!feof(infile))//文件没到结尾
    {
        //八线激光雷达两帧为一周期
        fseek(infile,i*sizeof(KEYPOINT),SEEK_SET);//从文件的开头开始算偏移
        ++i;
        fread(&szBuffer[recvcount],sizeof(KEYPOINT),1,infile);//每次读一帧  
        cout << "flag:  "<<recvcount<<endl;
        recvcount++;
        if (recvcount == 6)
        {
            recvcount = 0;
        }
        SetEvent(hEvent);
        Sleep(80);
    }
    return 0;
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

主要是定位麻烦,fseek函数的使用,连续读取

C++学习总结2,布布扣,bubuko.com

时间: 2024-10-13 17:33:48

C++学习总结2的相关文章

Vue.js学习笔记:属性绑定 v-bind

v-bind  主要用于属性绑定,Vue官方提供了一个简写方式 :bind,例如: <!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> <a :href="url"></a> 绑定HTML Class 一.对象语法: 我们可以给v-bind:class 一个对象,以动态地切换class.注意:v-bind:class指令可以与普通的class特

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

微信小程序学习总结(2)------- 之for循环,绑定点击事件

最近公司有小程序的项目,本人有幸参与其中,一个项目做下来感觉受益匪浅,与大家做下分享,欢迎沟通交流互相学习. 先说一下此次项目本人体会较深的几个关键点:微信地图.用户静默授权.用户弹窗授权.微信充值等等. 言归正传,今天分享我遇到的关于wx:for循环绑定数据的一个tips:  1. 想必大家的都知道wx:for,如下就不用我啰嗦了: <view class="myNew" wx:for="{{list}}">{{item.title}}<view

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys

零基础的人该怎么学习JAVA

对于JAVA有所兴趣但又是零基础的人,该如何学习JAVA呢?对于想要学习开发技术的学子来说找到一个合适自己的培训机构是非常难的事情,在选择的过程中总是 因为这样或那样的问题让你犹豫不决,阻碍你前进的步伐,今天就让小编为您推荐培训机构新起之秀--乐橙谷Java培训机构,助力你成就好未来. 选择java培训就到乐橙谷 北京有什么好的Java培训机构?来乐橙谷北京学Java,零基础走起,乐橙谷Java基础班授课老师经验非常丰富,课程内容安排合理,适合于有一点点Java基础甚至一点都不会Java的同学学

最全解析如何正确学习JavaScript指南,必看!

划重点 鉴于时不时,有同学私信问我:怎么学前端的问题.这里统一回复一下,如下次再遇到问我此问题同学,就直接把本文链接地址发给你了. "前端怎么学"应该因人而异,别人的方法未必适合自己.就说说我的学习方法吧:我把大部分时间放在学习js上了.因为这个js的学习曲线,先平后陡.项目实践和练习啥的,我不说了,主要说下工作之外的时间利用问题.我是怎么学的呢,看书,分析源码.个人这几天统计了一下,前端书籍目前看了50多本吧,大部分都是js的.市面上的书基本,差不多都看过. 第一个问题:看书有啥好处

轻松学习C语言编程的秘诀:总结+灵感

目前在准备一套C语言的学习教程,所以我这里就以C语言编程的学习来讲.注意,讲的是"轻松学习",那种不注重方法,拼命玩命的方式也有其效果,但不是我提倡的.我讲究的是在方式方法对头.适合你.减轻你学习负担和心里压力的前提下,才适当的抓紧时间. 因此,探索一种很好的学习方法就是我所研究的主要内容. 众所周知,学习C语言并非易事,要学好它更是难上加难.这和你期末考试背会几个题目的答案考上满分没多大关系,也就是说你考试满分也说明不了你学好.学精通了C语言.那么怎么才算学精通C语言?闭着眼睛对自己

开始我的Python爬虫学习之路

因为工作需要经常收集一些数据,我就想通过学爬虫来实现自动化完成比较重复的任务. 目前我Python的状况,跟着敲了几个教程,也算是懂点基础,具体比较深入的知识,是打算从做项目中慢慢去了解学习. 我是觉得如果一开始就钻细节的话,是很容易受到打击而放弃的,做点小项目让自己获得点成就感路才更容易更有信心走下去. 反正遇到不懂的就多查多问就对了. 知乎上看了很多关于入门Python爬虫的问答,给自己总结出了大概的学习方向. 基础: HTML&CSS,JOSN,HTTP协议(这些要了解,不太需要精通) R

javaweb学习纲要

Java Web  概述 大纲: 1.C/S体系结构 2.B/S体系机构 3.两种体系结构比较 4.主流的Web程序应用平台 5.java web学习路线图 1.C/S体系结构 C/S是Client/Server的缩写,即客户端/服务器结构.在这种结构中,服务器通常采用高性能的PC机或工作站,并采用大型数据库系统(如Oracle或SQL Server),客户端则需要安装专用的客户端软件,如下图所示.这种结构可以充分利用两端硬件环境的优势,将任务合理分配到客户端和服务,从而降低了系统的通讯开销.在