FastReport4.6程序员手册_翻译

一、使用TfrxReport 组件工作
1、加载并存储报表
默认情况下,报表窗体同项目窗体构存储在同一个DFM文件中。多数情况下,无须再操作,因而你就不必采用特殊方法加载报表。如果你决定在文件中存储报表窗体或者是数据库的

Blob字段(他提供了非常大的弹性,你能够在非编译程序中修改),你必须使用“TfrxReport”提供的加载和存储方法。
function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;
从一个给定名字文件中加载报表。如果第二个参数等于“True”并且文件没找到,那么他会触发一个异常。如果文件加载成功,他返回“True”。

procedure LoadFromStream(Stream: TStream);
从流中加载报表。

procedure SaveToFile(const FileName: String);
用特殊名称文件存储报表。

procedure SaveToStream(Stream: TStream);
把报表存在流中。

例如:
Pascal:
frxReport1.LoadFromFile('c:\1.fr3');
frxReport1.SaveToFile('c:\2.fr3');

C++:
frxReport1->LoadFromFile("c:\\1.fr3");

frxReport1->SaveToFile("c:\\2.fr3");

2.设计报表
通过“TfrxReport.DesignReport”方法调用报表设计器。你必须在你的项目中包含报表设计器(必要条件是:要么使用“TfrxDesigner”组件,要么增加“frxDesgn”单元到uses

列表)
“DesigReport”方法接受两个默认参数:
procedure DesignReport(Modal: Boolean = True; MDIChild: Boolean = False);
Modal参数决定设计器是否被模态,MDIChild参数允许把设计器窗体作为一个MDI子窗体。

例如:
frxReport1.DesignReport;

3.运行报表
应用下面两个“TfrxReport”方法中的一个启动报表:
procedure ShowReport(ClearLastReport: Boolean = True);
启动报表并在预览窗体中显示。如果“ClearLastReport”参数等于“False”,报表将会增加先前的一个报表结果,否则清除前一个报表结构。

function PrepareReport(ClearLastReport: Boolean = True): Boolean;
启动报表,没有打开预览窗体,参数赋值与“ShowReport”方法同名。如果报表构造成功,他返回“True”。

多数情况下,使用第一种方法更为方便一些。在报表被构造的同时,他会立刻显示一个预览窗体。

当需要增加另一个报表到前一个报表中的时候,“ClearLastReport”参数显得方便些。(此类技术用于批量报表打印)。

例如:
frxReport1.ShowReport;

 

4.预览报表
使用两种途径显示一个报表是可能的:两者都是调用“TfrxReport.ShowReport”方法(先前描述过了),或者使用“TfrxReport.ShowPreparedReport”方法来帮助实现。在第二

种情况下,报表构造没有被执行,但显示了一个完成的报表。也就是说,你要么在“PreparedReport”方法帮助下构造他,要么在构造前从文件中加载报表(查看“加载/存储完

成的报表”)

例如:

Pascal:

if frxReport1.PrepareReport then
  frxReport1.ShowPreparedReport;

C++:

if(frxReport1->PrepareReport(true))
  frxReport1->ShowPreparedReport(); 

在这种情况下,报表构造器先被完成了,并显示在预览窗体中。构造一个庞大的报表可能要花费很多时间,那就是为什么使用“ShowReport”非等时同步方法会好于

“PrepareReport/ShowPreparedReport”方法。你可以通过“TfrxReport.PreviewOptions”属的缺省值设定预览参数值。(这句翻译的不够好,请参考原文)

原文参考:In this case, report construction is finished first, and after that it is displayed in the preview window. Construction of a large report can take 

a lot of time, and that is why it is better to use the “ShowReport anisochronous” method, than the “PrepareReport/ShowPreparedReport” one. One can assign 

preview settings by default via the “TfrxReport.PreviewOptions” property.

5、打印报表
大多数情况下,你可以从预览窗体打印报表。要人工打印报表,你应该使用“TfrxReport.Print”方法,例如:

frxReport1.LoadFromFile(...);

frxReport1.PrepareReport;

frxReport1.Print;

同时,你可以在显示的打印对话框中设置打印参数,你也可以使用默认设定值。取消打印对话框,请参考“TfrxReport.PrintOptions”属性帮助

6.载入并存储报表
这个功能可以在预览窗口中执行。也可以使用手工方法执行,帮助参考“TfrxReport.PreviewPages”方法:
   function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean;

   procedure SaveToFile(const FileName: String);

   procedure LoadFromStream(Stream: TStream);

   procedure SaveToStream(Stream: TStream);
赋值和参数化类似与TfrxReport相应的方法。文件包含了完成的报表,默认情况下以“FP3”为扩展名。

例如:
Pascal:
frxReport1.PreviewPages.LoadFromFile('c:\1.fp3');
frxReport1.ShowPreparedReport;

C++:
frxReport1->PreviewPages->LoadFromFile("c:\\1.fp3");
frxReport1->ShowPreparedReport();

注意,完成的报表加载完毕后,预览方法是通过“ShowPreparedReport” 方法执行的。

7.导出报表
他可以从预览窗口中执行。也可以手动操作,通过“FfrxReport.Export”方法,及这个方法中的参数,你可以导出你想要导出的文件类型:

frxReport1.Export(frxHTMLExport1);

导出过滤组件必须是有效的(你必须把他们放到你项目中的窗体上)并调整正确。

The export filter component must be available (you must put it on the form of your project) and be adjusted correctly.

8.创建自定义预览窗体
FastReport在标准的预览窗口中显示报表。如果因为某些原因而不适合你,你可以创建一个自定义预览窗体。为了这个目的,需要设计FastReport组件面板中的“TfrxReport”组

件。要显示报表,TfrxReport.Preview方法应该连接到这个组件。

在使用TfrxPreview组件的时候,有两个典型的问题。他不会处理按键(箭头,PgUp,PgDown等等)和鼠标滚轮(如果有的话)。要让TfrxPreview同按键工作,设置焦点给他(他

是可以做到的,例如,在窗体的OnShow事件句柄中)

frxPreview.SetFocus;

要让TfrxPreview同鼠标滚轮工作,你必须创建OnMouseWheel事件句柄,并且调用TfrxPreview.MouseWheelScroll方法。

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; 
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  frxPreview1.MouseWheelScroll(WheelDelta);
end;


9.建立复合报表(批量打印)
    在某些情况下,需要立刻组织几个报表打印,或者在一个打印预览窗体中封装并呈现几个报表。要执行这些,在FastReport中有些工具能够允许建立一个新的报表附加在一个

已经存在的报表上。“TfrxReport.PrepareReport”方法中有一个选项“ClearLasReport”布尔类型参数,默认情况下他等于True,这个参数定义了是否有必要在建立报表时清除

前一个报表。下面的方法展示了如何从两个报表中建立一个批量报表:
Pascal:

frxReport1.LoadFromFile('1.fr3');
frxReport1.PrepareReport;
frxReport1.LoadFromFile('2.fr3');
frxReport1.PrepareReport(False);
frxReport1.ShowPreparedReport;

C++:

frxReport1->LoadFromFile("1.fr3");
frxReport1->PrepareReport(true);
frxReport1->LoadFromFile("2.fr3");
frxReport1->PrepareReport(false);
frxReport1->ShowPreparedReport();
    我们加载并建立第一个报表,但并没有显示他。然后我们加载第二个报表到同一个TfrxReport对象,并使用“ClearLastReport”参数,让他等于False。这就允许第二个报表

附加在先前建立的报表之后。接下来,我们在预览窗口中显示一个完成的报表。

9.1 复合报表中的页数
    你可以使用“Page”,“Page#”,“TotalPages”和“TotalPages#”系统变量显示页数或总页数,在复合报表中,这些变量以下面的方式工作:
Page - 当前报表页数
Page# - 批量报表页数
TotalPages - 当前报表总页数(报表必须两遍)
Totalpages# - 批量报表总页数

9.2 合并符合报表页数
    正如上面所说的,报表设计页中的“PrintOnPrevousPage”方法让你在打印报表的时候使用前一页的剩余空间接合报表。在复合报表中,允许你在前一个报表的最后一页的剩

余空间创建一个新的报表。要执行这个,要使能每一个连续报表的第一个设计页“PrintOnPreviousePage”属性
  
10.交互报表
    在交互报表中,你可以在预览窗口定义任意报表对象的鼠标单击反应。例如,一个用户能够单击数据线,结果运行一个带有选择线的明细数据。
    任何报表都能交互。要执行他,你仅仅需要创建TfrxReport.OnClickObject事件句柄。下面代码是这个事件句柄的示例:
Pascal:

procedure TForm1.frxReport1ClickObject(Page: TfrxPage; View: TfrxView;
  Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
begin
  if View.Name = 'Memo1' then
    ShowMessage('Memo1 contents:' + #13#10 + TfrxMemoView(View).Text);
  if View.Name = 'Memo2' then
  begin
    TfrxMemoView(View).Text := InputBox('Edit', 'Edit Memo2 text:', TfrxMemoView(View).Text);
    Modified := True;
  end;
end;

C++:
void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
      TMouseButton Button, TShiftState Shift, bool &Modified)
{
  TfrxMemoView * Memo;
  if(Memo =  dynamic_cast <TfrxMemoView *> (Sender))
  {
    if(Memo->Name == "Memo1")
      ShowMessage("Memo1 contents:\n\r" + Memo->Text);
    if(Memo->Name == "Memo2")
    {
      Memo->Text = InputBox("Edit", "Edit Memo2 text:", Memo->Text);
      Modified = true;
    }
  }
}


在对象的单击事件句柄上,你可以做如下事情:
- 修改一个对象或页的内容,传递句柄(结果,被修改的将被特殊标记,因此修改的内容应该引起重视);
- 由于使用重构或重新建立报表,调用TfrxReport.PrepareReport方法

在此例中,点击名字为memo1对象的结果显示这个对象内容的消息。当点击memo2是显示一个对话框,这个对象的内容可能被修改。设置Modified标志为True,允许保持和显示变更

。 
 
同样的方法,单击事件可以被定义成不同的响应。例如,运行一个新报表。如下注释是必要的。在FastReport3版本中,一个报表组件可以在一个预览窗口中显示唯一的报表(不像

FastReport2.x版本)。那就是为什么一个报表预览窗也会在分开的对象中运行一个报表,或者是同一个对象,但当前报表必须被抹除。
 

关于给终端用户一个可单击对象提示定位,在预览窗口中,鼠标经过一个可单击对象的时候,我们可以修改鼠标的光标。要做到这些,在报表设计器上选择一个要设计的对象并设置

他的cursor属性为不同于crDefault的某个值。

更多的细节涉及到定义的单击对象。在简单报表中,可以依照对象的名字或他的内容来定义。然而,这就不能更多的执行可修改的事例。例如,一个明细报表应当在一个数据选择

行被创建。一个用户单击了内容为12的memo1对象。数据行让这个对象参考什么?那就是为什么你应当知道主键了,主键用于明确的标识这一行。FastReport能够赋值一个字串,包

含任意数据(在我们的事例主键数据中),对于每个报表对象,这个字串存储在TagStr属性中。

 
让我们来通过一个报表的例子来举例说明,这个报表包含在FastReportDemo.exe-'Simple list'示例中。这是一个公司的客户列表,包含诸如客户名称,地址,联系人等数据。数

据源是来自DBDEMOS演示数据库的Customer.db表。这个表有一个主键,CustNO字段,他没有出现在报表中。我们的任务是终止他通过参考单击完成报表上的任意对象记录他,这就

意味着要获取主键的值,要执行此项操作,就要为所有对象的TagStr属性加入值,依赖于主数据栏:
[Customers."CustNo"]

 
在报表建立期间,使用相同的方法计算TagStr属性内容,同时计算文本对象的内容;这就意味着变量值会替代所有变量的位置。变量细节使用方括号括起来。那就是为什么行值

是'1005', '2112'等类似值了。在报表建立后,包含TagStr属性对象的类型取决与主数据栏。一个简单的从字串到整形的转换就会提供给我们一个主键的值,这也是所需记录能够

找到的主键。
 

如果主键是复合的(包含多个字段),TagStr属性的内容可能是如下值:
[Table1."Field1"];[Table1."Field2"]

在构造一个报表完成后,TagStr属性包含“1000;1”类型值, 此值不同比相同要好。

11.从代码中存取报表对象
报表对象(例如:report page, band, memo-object)是不能在你的代码中直接存取的。这就意味着你不能通过名字寻址对象。例如,当你在你的窗体上寻址一个按钮。要寻址一

个对象,在TfrxReport.FindObject方法中找到帮助:

Pascal:
var
  Memo1: TfrxMemoView;
Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;

C++:
TfrxMemoView * Memo = 
dynamic_cast <TfrxMemoView *> (frxReport1->FindObject("Memo1"));

然后,你就能够寻址对象的属性和方法。你也使用“TfrxReport.Pages”属性寻址报表页。

Pascal:
var
  Page1: TfrxReportPage;
Page1 := frxReport1.Pages[1] as TfrxReportPage;

C++:
TfrxReportPage * Page1 = dynamic_cast <TfrxReportPage *> (frxReport1->Pages[1]);

12.从代码中创建报表
作为一项规则,你将在设计器中创建多数报表。然而,在某些情况下(例如,当报表窗体未知的时候),使用代码手工创建一个报表是是十分必要的。
想要手工创建一个报表,你需要执行下面的顺序步骤:
- 清除报表组件
- 添加数据源
- 添加数据页
- 添加报表页
- 添加栏页
- 设置栏属性,接着把他们同数据相连
- 在每个栏上加入对象
- 设置对象属性,接着把他们同数据相连

让我们来检查一下创建一个简单报表的类型列表。假设我们拥有如下组件:frxReport1: TfrxReport and frxDBDataSet1: TfrxDBDataSet(最后一个连接到DBDEMOS数据,

Customer.db表)。我们的报表将包含一个带有报表标题和主数据栏的页。在报表标题栏上有一个带有“Hellow FastReport”文本的对象,主数据栏包含一个带有连接到“CustNo”

字段的对象。

Pascal:

var
  DataPage: TfrxDataPage;
  Page: TfrxReportPage;
  Band: TfrxBand;
  DataBand: TfrxMasterData;
  Memo: TfrxMemoView;

{ 清除报表 }
frxReport1.Clear;
{ 为报表添加数据集到可存取的列表中 }
frxReport1.DataSets.Add(frxDBDataSet1);

{ 添加"Data"页 }
DataPage := TfrxDataPage.Create(frxReport1);

{ 添加页 }
Page := TfrxReportPage.Create(frxReport1);
{ 创建唯一名称 }
Page.CreateUniqueName;
{ 设置默认字段大小, 纸张和打印方向 }
Page.SetDefaults;
{ 修改纸张方向 }
Page.Orientation := poLandscape;

{ 添加一个报表标题栏 }
Band := TfrxReportTitle.Create(Page);
Band.CreateUniqueName;
{ it is sufficient to set the ?Top? coordinate and height for a band }
{ both coordinates are in pixels }
Band.Top := 0;
Band.Height := 20;
 
{ 为标题栏添加一个对象 }

Memo := TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.Text := 'Hello FastReport!';
Memo.Height := 20;
{ 这个对象将伸展坐标到栏的宽度 }
Memo.Align := baWidth;
 
{ 添加主数据栏 }
DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet := frxDBDataSet1;
{ 顶端的调整应当比先前加入栏的顶部+高度大一些 }
DataBand.Top := 100;
DataBand.Height := 20;

{ 在主数据栏上添加一个对象 }
Memo := TfrxMemoView.Create(DataBand);
Memo.CreateUniqueName;
{ 连接数据 }
Memo.DataSet := frxDBDataSet1;
Memo.DataField := 'CustNo';
Memo.SetBounds(0, 0, 100, 20);
{ 调整文本到右侧的对象边缘 }
Memo.HAlign := haRight;

{ 显示报表 }
frxReport1.ShowReport;


C++:

TfrxDataPage * DataPage;
TfrxReportPage * Page;
TfrxBand * Band;
TfrxMasterData * DataBand;
TfrxMemoView * Memo;

// 清除报表 
frxReport1->Clear();

// 在报表上添加一个数据集到数据集存取列表
frxReport1->DataSets->Add(frxDBDataset1);

// 添加“数据”页
DataPage = new TfrxDataPage(frxReport1);

// 添加一页
Page = new TfrxReportPage(frxReport1);

// 创建一个不重复的名称
Page->CreateUniqueName();

// 设置域大小, 纸张和默认的打印方向
Page->SetDefaults();

// 修改纸张的打印方向
Page->Orientation = poLandscape;

// 增加一个报表标题栏
Band = new TfrxReportTitle(Page);
Band->CreateUniqueName();

// 为栏充分设置顶部坐标和高度
// 在像素上包含坐标
Band->Top = 0;
Band->Height = 20;

// 在报表标题栏加入一个对象
Memo = new TfrxMemoView(Band);
Memo->CreateUniqueName();
Memo->Text = "Hello FastReport!";
Memo->Height = 20;

// 此对象将会被按照栏的宽度延展
Memo->Align = baWidth;

// 添加主数据栏
DataBand = new TfrxMasterData(Page);
DataBand->CreateUniqueName();

DataBand->DataSet = frxDBDataset1;
// 顶部坐标应该大于前边添加栏的顶部坐标+高度
DataBand->Top = 100;
DataBand->Height = 20;

// 主数据上加入一个对象
Memo = new TfrxMemoView(DataBand);
Memo->CreateUniqueName();
// 连接到数据

Memo->DataSet = frxDBDataset1;
Memo->DataField = "CustNo";
Memo->SetBounds(0, 0, 100, 20);

// 调整文本到右侧对象的空白
Memo->HAlign = haRight;
// 显示报表
frxReport1->ShowReport(true);

让我们来解释一些细节:
    所有在报表中使用的数据集都必须添加到数据源列表中,在我们示例中,是用frxReport1.DataSets.Add(frxDBDataSet1)这一行执行的。否则,报表就不会工作。
    数据页对于插入内部数据集是必要的,例如TfrxADOTable。这些数据集只能放在数据页。
    调用Page.SetDefaults不是必须的,因为在这个案例中页A4纸张设置和页边距都是0毫米。默认值设置10毫米页边距,并捕获打印机页大小和对齐方式。
    在增加栏到页面的同时,你要确认他们没有互相重叠在一起。要执行他,顶部和高度的坐标是相似的。总是要在设计器中定位相同的位置的。
 
对象的坐标和大小是以像素为单位的,因为所有对象的left, Top, Width和Height属性都拥有扩展类型,你能够指出非整形值。下面常量用于转化像素到厘米和英寸:
fr01cm = 3.77953;
fr1cm  = 37.7953;
fr01in = 9.6;
fr1in  = 96;

例如,一个栏的高度等于5毫米如下设定:
Band.Height := fr01cm * 5; 
Band.Height := fr1cm * 0.5; 

12.代码中创建对话框
    我们知道,报表可以包含对话框窗体。下面的例子展示了如何创建一个带有OK按钮的对话框窗体:

Pascal:

 { for working with dialogue objects the following unit should be used }

uses frxDCtrl;

var
  Page: TfrxDialogPage;
  Button: TfrxButtonControl;

{ 添加页 }
Page := TfrxDialogPage.Create(frxReport1);
{ 创建唯一名称 }
Page.CreateUniqueName;
{ 设置大小 }
Page.Width := 200;
Page.Height := 200;
{ 设定位置 }
Page.Position := poScreenCenter;
 
{ 添加一个按钮 }
Button := TfrxButtonControl.Create(Page);
Button.CreateUniqueName;
Button.Caption := 'OK';
Button.ModalResult := mrOk;
Button.SetBounds(60, 140, 75, 25);

{ 显示报表 }
frxReport1.ShowReport;
 
C++:

//使用对话框对象工作,会用到下面的单元

#include "frxDCtrl.hpp"

TfrxDialogPage * Page;
TfrxButtonControl * Button;

//添加一页
Page = new TfrxDialogPage(frxReport1);

//创建唯一名称
Page->CreateUniqueName();

//设置大小
Page->Width = 200;
Page->Height = 200;

//设定位置
Page->Position = poScreenCenter;

// 添加一个按钮
Button = new TfrxButtonControl(Page);
Button->CreateUniqueName();
Button->Caption = "OK";
Button->ModalResult = mrOk;
Button->SetBounds(60, 140, 75, 25);

//显示报表 
frxReport1->ShowReport(true);

转载于:https://www.cnblogs.com/cyzgg/p/10717152.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python音频信号处理 1.短时傅里叶变换及其逆变换

短时傅里叶变换及其逆变换 本篇文章主要记录了使用python进行短时傅里叶变换&#xff0c;分析频谱&#xff0c;以及通过频谱实现在频域内降低底噪的代码及分析&#xff0c;希望可以给同样在学习信号处理的大家一点帮助&#xff0c;也希望大家对我的文章多提意见建议。 一. 短…

Java多线程同步机制

一段synchronized的代码被一个线程执行之前&#xff0c;他要先拿到执行这段代码的权限&#xff0c;在 java里边就是拿到某个同步对象的锁&#xff08;一个对象只有一把锁&#xff09;&#xff1b; 如果这个时候同步对象的锁被其他线程拿走了&#xff0c;他&#xff08;这个线程…

SpringBoot与数据访问

pom依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-conne…

Python音频信号处理 2.使用谱减法去除音频底噪

使用谱减法去除音频底噪 上一篇文章我主要分享了短时傅立叶变换及其逆变换在python中的实现&#xff0c;有兴趣的可以阅读一下该篇文章&#xff0c;地址如下&#xff1a; Python音频信号处理 1.短时傅里叶变换及其逆变换 那么在本篇文章中&#xff0c;我们将利用短时傅立叶变…

线程池的优点

线程池的优点 1、线程是稀缺资源&#xff0c;使用线程池可以减少创建和销毁线程的次数&#xff0c;每个工作线程都可以重复使用。 2、可以根据系统的承受能力&#xff0c;调整线程池中工作线程的数量&#xff0c;防止因为消耗过多内存导致服务器崩溃。 线程池的创建 public…

ROS(Robot Operating System)笔记 : 2.创建并配置package

ROS(Robot Operating System)笔记 : 2.创建一个ROS包并设置其依赖 1.首先来到ros的工作目录下&#xff0c;接着使用 catkin_make [包名称] [依赖1] [依赖2] … 创建一个包名为 challenge_project 的 ros包。 $ catkin_create_pkg challenge_project rospy std_msgs cv_bri…

Java线程相关的热门面试题

1) 什么是线程&#xff1f; 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。程序员可以通过它进行多处理器编程&#xff0c;你可以使用多线程对运算密集型任务提速。比如&#xff0c;如果一个线程完成一个任务要…

linux运维、架构之路-jumpserver

linux运维、架构之路-jumpserver 一、jumpserver介绍 是一款由python编写开源的跳板机(堡垒机)系统&#xff0c;实现了跳板机应有的功能。基于ssh协议来管理&#xff0c;客户端无需安装agent。 特点&#xff1a; 完全开源&#xff0c;GPL授权 Python编写&#xff0c;容易再次开…

C++ STL学习笔记 : 1. template 模板函数

本篇文章是学习C STL库的第一篇笔记&#xff0c;主要记录了使用template关键字创建模板函数的方法。 下面用一个非常简单的例子解释模板函数的用法 : #include <iostream> using namespace std;template <class T> void myswap(T& a, T& b) {T temp a;a…

C++ STL学习笔记 : 2. unordered map 容器

本文中&#xff0c;简单总结一下使用unordered map 的心得。unordered_map容器属于STL中关联表的一种&#xff0c;常用的map容器与unordered_map容器在使用中有着很大程度的相同点&#xff0c;在之后的文章中我可能会针对二者的相同点与不同点进行细致的分析&#xff0c;这里就…

tensorflow 安装在Anaconda

python环境&#xff1a;win10 64下anaconda4.2.0(python3.5)。安装tensorflow过程是在Anaconda Prompt中进行安装 1&#xff1a;打开Anaconda Prompt 在安装之前&#xff0c;说几个关于conda的小命令 conda list&#xff1a;可以显示已经安装好的库。 conda install 库名 &…

伯努利数学习笔记的说...

经过一天的学习&#xff0c;我们发现伯努利数是个非常有用 &#xff08;个屁&#xff09; 的数列 定义 但是...伯努利数是什么呢&#xff1f;我们先给伯努利数一个定义&#xff1a; 令 \(B(i)\) 表示 伯努利数第 i 项&#xff0c;那么有&#xff1a; \[\sum_{i0}^{n} \begin{pm…

Dijkstra迪杰斯特拉算法 C++实现

本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C实现&#xff0c;文章包含两个部分&#xff0c;在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解&#xff0c;第二部分会对C代码的逻辑进行解释。下面是我已经上传的代码资源&#xff0c;大家有兴趣的可以点击链接下载资…

Python开发一个股票类库

前言 使用Python开发一个股票项目。 项目地址&#xff1a; https://github.com/pythonstock/stock 相关资料&#xff1a; http://blog.csdn.net/freewebsys/article/details/78294566 主要使用开发语言是python。 使用的lib库是pandas&#xff0c;tushare&#xff0c;Tens…

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. For example, given…

C++ STL 学习笔记 3. 文本文件操作

本文主要总结了C中对文本文件的基本操作以及使用心得&#xff0c;第一部分中总结了C对文本文件的基本操作&#xff0c;第二部分中会以csv文件为例&#xff0c;进行读取存储由逗号分隔的字符串的操作。 1. 文本读取写入基础 要使用文件输入输出流&#xff0c;首先需要include相…

C# 调用python

1.C# 调用python 本质上是使用命令行运行python 1.1 C# 使用命令行 program.cs using System; using System.Diagnostics; using System.IO;namespace test {class Program{static void Main(string[] args){Program p new Program();string result p.run_cmd("ping…

4-17

1、html 中div class是什么&#xff1f; 在这里我将用id与class的比较&#xff0c;让这个问题更容易理解&#xff08;1&#xff09;、使用区别id具有唯一性&#xff0c;在一个网页中同一个命名只能使用一次&#xff1b;class命名的类可以在一个网页中使用无数次。&#xff08;2…

python pandas serie简介及基本使用

本篇文章主要罗列了pandas模块中serie的基本使用。环境是jupyter notebook python 3.7。 serie是能够保存任何类型数据的一维数组&#xff0c;轴标签统称为索引&#xff0c;索引必须是唯一的散列且与数据的长度相同&#xff0c;默认情况下为np.arange(n)。 首先是import pand…

Linux系统中nc工具那些不为人知的用法

Linux nc命令用法 参考地址&#xff1a;https://www.cnblogs.com/jjzd/p/6306273.html -g<网关>&#xff1a;设置路由器跃程通信网关&#xff0c;最多设置8个; -G<指向器数目>&#xff1a;设置来源路由指向器&#xff0c;其数值为4的倍数; -h&#xff1a;在线帮助;…