博文

C++基础碎碎念

Welcome file   如果想在多个文件之间共享 const 对象,必须在变量得定义之前添加 extern 关键字。   一般来说,如果你认定变量是一个常量表达式,那就把它声明成 constexpr 类型。    auto 类型说明符 : C++11引入 auto 来让编译器替我们去分析表达式所属的类型。 注意, auto 让编译器通过初始值来推算变量的类型,显然 auto 定义的变量必须有初始值。 使用 auto 也能在一条语句中声明多个变量,因为一条声明语句只能有一个基本数据类型,所以 该语句中所有变量的初始基本数据类型都必须一样。    decltype 类型指示符 :有时会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型, 但是不想用该表达式的值初始化变量。为了满足这一要求C++11引入了第二种类型说明符 decltype ,它的作用是 选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值:    decltype(f()) sum = x; // su的类型就是函数f的返回类型    预处理器 :预处理变量有两种状态:已定义和未定义。 #define 指令把一个名字设定为预处理变量, 另外两个指令则分别检查某个指定的预处理变量是否已经定义: #ifdef 当且仅当变量已定义时为真, #ifndef 当且仅当 变量未定义时为真,则执行后续操作直到遇到 endif 指令为止。   使用getline读取一整行:有时我们希望能在最终得到的字符串中保留输入时的空白符,这时应该用 getline 函数 代替原来的>>运算符。getline函数的参数是一个输入流和一个string对象,函数从给定的输入流读取内容,直到遇到换行符为止(注意 ,换行符也被读进来了)。   string::size_type类型:string的size函数返回值的类型是size_type而不是int。string类及其它大多数 标准库都定义了几种配套的类型。显然size_type是无符号类型。如果一条表达式中已经有了size() 函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题。   如果循环体内部包含有向vec...

OpenGL的使用

Welcome file 3.1.使用GLUT进行显示窗口显示   使用OpenGL实用库的第一步是初始化GLUT。该初始化函数也能处理任何命令行变量,但不需要在第一个实例程序中使用参数。 完成GLUT初始化的语句是    glutInit(&argc, argv);   接着,需要说明的是 显示窗口在创建时要给定一个标题。这是以下的语句实现的:    glutCreateWindow("An Example OpenGL Program""); 这里的单一变量可以是用做显示窗口标题的任何字符串。   下面我们需要指定显示窗口要显示什么内容。为此,使用OpenGL函数创建一个图并将图的 定义传递给GLUT函数 glutDisplayFunc ,即将图赋给显示窗口。作为一个例子,假定我们在 称为 lineSegment 的过程中已经有了线段的OpenGL描述程序。则调用下列函数就将线段描述送到窗口:    glutDisplayFunc(lineSegment);   但是显示窗口还未出现在屏幕上。我们需要使用另一个GLUT函数来完成窗口处理操作。在执行下列语句后, 所有已创建的显示窗口连同其中的图形将被激活:    glutMainLoop(); 该函数必须是程序中的最后一个。它显示初始图形并使程序进入检查鼠标或键盘等设备输入的无穷循环之中。我们的第一个例子 不是交互式的,所以程序仅仅显示其中的图形直到显示窗口关闭。   尽管我们创建的显示窗口有默认的位置和大小,但还是可以使用另外的GLUT函数来设定这些参数。 glutInitWindowPosition 可用来给出显示窗口左上角的初始位置。该位置使用以屏幕左上角 为原点的整数坐标来表示。   类似的, glutInitWindowSize 函数用来设定显示窗口的初始宽度和高度的像素数。   可以使用 glutInitDisplayMode 函数来设定显示窗口的缓存和颜色模型等选项。 该函数的变量使用符号化GLUT常量来赋值。传送给该函数的常量值利用逻辑或操作组合起来。( glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); )事实上,单缓存( GLUT_SI...

Numberical Analysis --- Numerical Differentiation and Integration

Welcome file Numerical Differentiation Given x 0 x_0 x 0 ​ , approximate f ′ ( x 0 ) f'(x_0) f ′ ( x 0 ​ ) . f ′ ( x 0 ) = lim ⁡ h → 0 f ( x 0 + h ) − f ( x 0 ) h f'(x_0)=\lim\limits_{h\to 0}\frac{f(x_0+h)-f(x_0)}{h} f ′ ( x 0 ​ ) = h → 0 lim ​ h f ( x 0 ​ + h ) − f ( x 0 ​ ) ​ ⇒ f ′ ( x 0 ) ≈ f ( x 0 + h ) − f ( x 0 ) h ( forward ) \Rightarrow f'(x_0)\approx \frac{f(x_0+h)-f(x_0)}{h}(\text{forward}) ⇒ f ′ ( x 0 ​ ) ≈ h f ( x 0 ​ + h ) − f ( x 0 ​ ) ​ ( forward ) ⇒ f ′ ( x 0 ) ≈ f ( x 0 ) − f ( x 0 − h ) h ( backward ) \Rightarrow f'(x_0)\approx \frac{f(x_0)-f(x_0-h)}{h}(\text{backward}) ⇒ f ′ ( x 0 ​ ) ≈ h f ( x 0 ​ ) − f ( x 0 ​ − h ) ​ ( backward ) Approximate f ( x ) f(x) f ( x ) by its Lagrange polynomial with interpolating points x 0 x_0 x 0 ​ and x 0 + h x_0+h x 0 ​ + h : f ( x ) = f ( x 0 ) ( x − x 0 − h ) x 0 − x 0 − h + f ( x 0 + h ) ( x − x 0 ) x 0 + h − x 0 + ( x − x 0 ) ( x − x 0 − h ) 2 f ′ ′ ( ξ x ) \begin{aligned} f(x)...