矩阵基本运算的实现(standard C++Version)
一年前 自己动手编写的代码,尽量使用了标准C++,其中用到了一些标准模板库STL,但没有用到很高级的部分,不懂STL的朋友也应该可以看懂,建议看一下《Generic Programming and STL》,有候捷译本《泛型编程与STL》。
头文件
实现文件
实现了很多基本的操作,需要的话还可以自己扩充。如果实现那些注释掉的代码,功能就比较强了。
另有标准C语言版本。
头文件
1
/***
2
*
3
* author:XieXiaokui
5
* purpose:Defines functions for matrix
6
*
7
***/
8
#pragma once
9![](/Images/OutliningIndicators/None.gif)
10
#include <iostream>
11
#include <fstream>
12![](/Images/OutliningIndicators/None.gif)
13
#include <string>
14
#include <sstream>
15
#include <algorithm>
16
#include <functional>
17
#include <numeric>
18
#include <iterator>
19
#include <cassert>
20![](/Images/OutliningIndicators/None.gif)
21
#include "MatrixException.h"
22![](/Images/OutliningIndicators/None.gif)
23
using namespace std;
24![](/Images/OutliningIndicators/None.gif)
25
class Matrix
26
{
27
public:
28
29
// Constructors
30
explicit Matrix();
31
explicit Matrix(int size);
32
Matrix(int row,int col);
33
Matrix(const Matrix& m);
34![](/Images/OutliningIndicators/InBlock.gif)
35
// Destructor
36
~Matrix();
37![](/Images/OutliningIndicators/InBlock.gif)
38
// Assignment operators
39
Matrix& operator= (const Matrix& m);
40![](/Images/OutliningIndicators/InBlock.gif)
41
// Value extraction method
42
int GetRow() const;
43
int GetCol() const;
44![](/Images/OutliningIndicators/InBlock.gif)
45
// Subscript operator
46
double operator()(int i,int j)const; //subscript operator to get individual elements
47
double& operator()(int i,int j); //subscript operator to set individual elements
48![](/Images/OutliningIndicators/InBlock.gif)
49
// Unary operators
50
Matrix operator+() const; //unary negation operator
51
Matrix operator-() const; //unary negation operator
52![](/Images/OutliningIndicators/InBlock.gif)
53
//Binary operators
54
Matrix operator+(const Matrix& m) const;
55
Matrix operator-(const Matrix& m) const;
56
Matrix operator*(const Matrix& m) const;
57
// Matrix operator*(double d)const;
58
Matrix operator/(const Matrix& m) const;
59
Matrix operator/(double d) const;
60
Matrix operator^(int pow) const;
61![](/Images/OutliningIndicators/InBlock.gif)
62
bool operator== (const Matrix& m) const; //logical equal-to operator
63
bool operator!= (const Matrix& m) const; //logical not-equal-to operator
64![](/Images/OutliningIndicators/InBlock.gif)
65
friend Matrix operator* (double d,const Matrix& m);
66
friend Matrix operator/ (double d,const Matrix& m);
67![](/Images/OutliningIndicators/InBlock.gif)
68![](/Images/OutliningIndicators/InBlock.gif)
69![](/Images/OutliningIndicators/InBlock.gif)
70
// Combined assignment - calculation operators
71
Matrix& operator +=(const Matrix& m) const;
72
Matrix& operator -=(const Matrix& m) const;
73
Matrix& operator *=(const Matrix& m) const;
74
Matrix& operator *=(double d) const;
75
Matrix& operator /=(const Matrix& m) const;
76
Matrix& operator /=(double d) const;
77
Matrix& operator ^=(int pow) const;
78![](/Images/OutliningIndicators/InBlock.gif)
79
// Miscellaneous -methods
80
void SetZero() ; //zero matrix:零阵
81
void SetUnit() ; //unit matrix:单位阵
82
void SetSize(int size) ; //rsizing matrix
83
void SetSize(int row,int col) ; //resizing matrix
84![](/Images/OutliningIndicators/InBlock.gif)
85
// Utility methods
86
Matrix Solve(const Matrix& m)const; //
87
Matrix Adjoin() const; //adjoin matrix:伴随矩阵
88
double Determinant() const; //determinant:行列式
89
double Norm() const; //norm:模
90
Matrix Inverse() const; //inverse:逆阵
91
Matrix Transpose() const; //transpose:转置
92
double Cofactor() const; //confactor
93
double Condition() const; //the condition number of a matrix
94
int Pivot(int row) const; // partial pivoting
95![](/Images/OutliningIndicators/InBlock.gif)
96
//primary change
97
Matrix& Exchange(int i,int j);// 初等变换 对调两行:ri<-->rj
98
Matrix& Multiple(int index,double k); //初等变换 第index 行乘以k
99
Matrix& MultipleAdd(int index,int src,double k); //初等变换 第src行乘以k加到第index行
100
101![](/Images/OutliningIndicators/InBlock.gif)
102
// Type of matrices
103
bool IsSquare() const; //determine if the matrix is square:方阵
104
bool IsSingular() const; //determine if the matrix is singular奇异阵
105
bool IsDiagonal() const; //determine if the matrix is diagonal对角阵
106
bool IsScalar() const; //determine if the matrix is scalar数量阵
107
bool IsUnit() const; //determine if the matrix is unit单位阵
108
bool IsZero() const; //determine if the matrix is zero零矩阵
109
bool IsSymmetric() const; //determine if the matrix is symmetric对称阵
110
bool IsSkewSymmetric() const; //determine if the matrix is skew-symmetric斜对称阵
111
bool IsUpperTriangular() const; //determine if the matrix is upper-triangular上三角阵
112
bool IsLowerTriangular() const; //determine if the matrix is lower-triangular下三角阵
113![](/Images/OutliningIndicators/InBlock.gif)
114
// output stream function
115
friend ostream& operator<<(ostream& os,const Matrix& m);
116![](/Images/OutliningIndicators/InBlock.gif)
117
// input stream function
118
friend istream& operator>>(istream& is,Matrix& m);
119![](/Images/OutliningIndicators/InBlock.gif)
120
//conert to string
121
string ToString() const;
122![](/Images/OutliningIndicators/InBlock.gif)
123
protected:
124![](/Images/OutliningIndicators/InBlock.gif)
125
//delete the matrix
126
void Create(int row,int col);
127
void Clear();
128![](/Images/OutliningIndicators/InBlock.gif)
129
private:
130![](/Images/OutliningIndicators/InBlock.gif)
131
const static double epsilon;
132![](/Images/OutliningIndicators/InBlock.gif)
133
double** m_data;
134
size_t m_row;
135
size_t m_col;
136![](/Images/OutliningIndicators/InBlock.gif)
137
};
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/None.gif)
18
![](/Images/OutliningIndicators/None.gif)
19
![](/Images/OutliningIndicators/None.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/None.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/None.gif)
24
![](/Images/OutliningIndicators/None.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
/***
2
*
3
*
4
* author:XieXiaokui
5
* purpose:Defines functions for matrix
6
*
7
***/
8
#include "stdafx.h"
9![](/Images/OutliningIndicators/None.gif)
10
#include <iostream>
11
#include <fstream>
12![](/Images/OutliningIndicators/None.gif)
13
#include <string>
14
#include <sstream>
15
#include <algorithm>
16
#include <functional>
17
#include <numeric>
18
#include <iterator>
19
#include <cmath>
20
#include <cassert>
21![](/Images/OutliningIndicators/None.gif)
22
#include "matrix.h"
23![](/Images/OutliningIndicators/None.gif)
24
using namespace std;
25![](/Images/OutliningIndicators/None.gif)
26
const double Matrix::epsilon = 1e-7;
27![](/Images/OutliningIndicators/None.gif)
28
// constructor
29![](/Images/OutliningIndicators/None.gif)
30
Matrix::Matrix():m_row(0),m_col(0),m_data(0)
31
{
32
}
33![](/Images/OutliningIndicators/None.gif)
34![](/Images/OutliningIndicators/None.gif)
35
// constructor
36
Matrix::Matrix(int size):m_row(size),m_col(size)
37
{
38
if(size<=0)
39
{
40
m_row=0;
41
m_col=0;
42
m_data=0;
43![](/Images/OutliningIndicators/InBlock.gif)
44
ostringstream oss;
45
oss<<"In Matrix::Matrix(int size) size "<<size<<" <=0.Please check it.";
46
throw oss.str();
47
48
}
49
50
m_data=new double*[size];
51![](/Images/OutliningIndicators/InBlock.gif)
52
for(int i=0;i<size;i++)
53
{
54
m_data[i]=new double[size];
55
}
56![](/Images/OutliningIndicators/InBlock.gif)
57
}
58![](/Images/OutliningIndicators/None.gif)
59
// constructor
60
Matrix::Matrix(int row,int col):m_row(row),m_col(col)
61
{
62
if(row<=0)
63
{
64
m_row=0;
65
m_col=0;
66
m_data=0;
67![](/Images/OutliningIndicators/InBlock.gif)
68
ostringstream oss;
69
oss<<"In Matrix::Matrix(int row,int col),row "<<row<<" <=0.Please check it.";
70
throw oss.str();
71
}
72
if(col<=0)
73
{
74
m_row=0;
75
m_col=0;
76
m_data=0;
77![](/Images/OutliningIndicators/InBlock.gif)
78
ostringstream oss;
79
oss<<" In Matrix::Matrix(int row,int col),col "<<col<<" <=0.Pleasecheck it.";
80
throw oss.str();
81
}
82![](/Images/OutliningIndicators/InBlock.gif)
83
m_data=new double*[row];
84
for(int i=0;i<row;i++)
85
{
86
m_data[i]=new double[col];
87
}
88
}
89![](/Images/OutliningIndicators/None.gif)
90
//copy constructor
91
Matrix::Matrix(const Matrix& m):m_row(m.m_row),m_col(m.m_col)
92
{
93
m_data = new double*[m_row];
94
for(int i=0;i<m_row;i++)
95
{
96
m_data[i] = new double[m_col];
97
}
98![](/Images/OutliningIndicators/InBlock.gif)
99
for(int i=0;i<m_row;i++)
100
{
101
copy(m.m_data[i],m.m_data[i]+m_col,m_data[i]);
102
}
103![](/Images/OutliningIndicators/InBlock.gif)
104
}
105![](/Images/OutliningIndicators/None.gif)
106
Matrix::~Matrix()
107
{
108
if(m_data != 0)
109
{
110
for(int i=0;i<m_row;i++)
111
{
112
delete[] m_data[i];
113
}
114
delete[] m_data;
115
}
116
}
117![](/Images/OutliningIndicators/None.gif)
118
void Matrix::SetZero()
119
{
120
for(int i=0;i<m_row;i++)
121
fill(m_data[i],m_data[i]+m_col,0);
122
}
123![](/Images/OutliningIndicators/None.gif)
124
void Matrix::SetUnit()
125
{
126
for(int i=0;i<m_row;i++)
127
for(int j=0;j<m_col;j++)
128
m_data[i][j] = (i==j)?1:0;
129
}
130![](/Images/OutliningIndicators/None.gif)
131
void Matrix::SetSize(int size)
132
{
133
Clear();
134
Create(size,size);
135
}
136![](/Images/OutliningIndicators/None.gif)
137![](/Images/OutliningIndicators/None.gif)
138
void Matrix::SetSize(int row,int col)
139
{
140
Clear();
141
Create(row,col);
142
}
143![](/Images/OutliningIndicators/None.gif)
144![](/Images/OutliningIndicators/None.gif)
145
void Matrix::Clear()
146
{
147![](/Images/OutliningIndicators/InBlock.gif)
148
if(m_data != 0)
149
{
150
for(int i=0;i<m_row;i++)
151
{
152
delete[] m_data[i];
153
}
154
delete[] m_data;
155
}
156![](/Images/OutliningIndicators/InBlock.gif)
157
m_row=0;
158
m_col=0;
159
m_data=0;
160
}
161![](/Images/OutliningIndicators/None.gif)
162
/*
163
Matrix& Matrix::Create(int size)
164
{
165
if(size<=0)
166
{
167
ostringstream oss;
168
oss<<"In Matrix::Create(int size),size "<<size<<" <=0.Please check it.";
169![](/Images/OutliningIndicators/InBlock.gif)
170
throw oss.str();
171
}
172![](/Images/OutliningIndicators/InBlock.gif)
173
if(m_data != 0)
174
{
175
for(int i=0;i<m_row;i++)
176
{
177
delete[] m_data[i];
178
}
179
delete[] m_data;
180
}
181![](/Images/OutliningIndicators/InBlock.gif)
182
m_row=size;
183
m_col=size;
184![](/Images/OutliningIndicators/InBlock.gif)
185
m_data=new double*[size];
186
for(int i=0;i<size;i++)
187
{
188
m_data[i]=new double[size];
189
}
190![](/Images/OutliningIndicators/InBlock.gif)
191
for(int i=0;i<size;i++)
192
{
193
for(int j=0;j<size;j++)
194
{
195
m_data[i][j] = ((i==j)?1:0);
196
}
197
}
198![](/Images/OutliningIndicators/InBlock.gif)
199
return *this;
200
}
201
*/
202![](/Images/OutliningIndicators/None.gif)
203
void Matrix::Create(int row,int col)
204
{
205
if(row<=0)
206
{
207
ostringstream oss;
208
oss<<"In Matrix::Create(int row,int col),row "<<row<<" <=0.Please check it.";
209
throw oss.str();
210
}
211
if(col<=0)
212
{
213
ostringstream oss;
214
oss<<"In Matrix::Create(int row,int col),col "<<col<<" <=0.Please check it.";
215
throw oss.str();
216
}
217![](/Images/OutliningIndicators/InBlock.gif)
218
if(m_data != 0)
219
{
220
for(int i=0;i<m_row;i++)
221
{
222
delete[] m_data[i];
223
}
224
delete[] m_data;
225
}
226![](/Images/OutliningIndicators/InBlock.gif)
227
m_row=row;
228
m_col=col;
229
m_data=new double*[row];
230
for(int i=0;i<row;i++)
231
{
232
m_data[i]=new double[col];
233
}
234
}
235![](/Images/OutliningIndicators/None.gif)
236![](/Images/OutliningIndicators/None.gif)
237
int Matrix::GetRow() const
238
{
239
return m_row;
240
}
241![](/Images/OutliningIndicators/None.gif)
242
int Matrix::GetCol() const
243
{
244
return m_col;
245
}
246![](/Images/OutliningIndicators/None.gif)
247
//transpose 转置
248
Matrix Matrix::Transpose() const
249
{
250
Matrix ret(m_col,m_row);
251
for(int i=0;i<m_row;i++)
252
{
253
for(int j=0;j<m_col;j++)
254
{
255
ret.m_data[j][i] = m_data[i][j];
256
}
257
}
258
return ret;
259
}
260![](/Images/OutliningIndicators/None.gif)
261
int Matrix::Pivot(int row) const
262
{
263
int index=row;
264![](/Images/OutliningIndicators/InBlock.gif)
265
for(int i=row+1;i<m_row;i++)
266
{
267
if(m_data[i][row] > m_data[index][row])
268
index=i;
269
}
270![](/Images/OutliningIndicators/InBlock.gif)
271
return index;
272
}
273![](/Images/OutliningIndicators/None.gif)
274![](/Images/OutliningIndicators/None.gif)
275
Matrix& Matrix::Exchange(int i,int j) // 初等变换:对调两行ri<-->rj
276
{
277
if(i<0 || i>=m_row)
278
{
279
ostringstream oss;
280
oss<<"In void Matrix::Exchange(int i,int j) ,i "<<i<<" out of bounds.Please check it.";
281
throw oss.str();
282
}
283![](/Images/OutliningIndicators/InBlock.gif)
284
if(j<0 || j>=m_row)
285
{
286
ostringstream oss;
287
oss<<"In void Matrix::Exchange(int i,int j) ,j "<<j<<" out of bounds.Please check it.";
288
throw oss.str();
289
}
290![](/Images/OutliningIndicators/InBlock.gif)
291
for(int k=0;k<m_col;k++)
292
{
293
swap(m_data[i][k],m_data[j][k]);
294
}
295![](/Images/OutliningIndicators/InBlock.gif)
296
return *this;
297
}
298![](/Images/OutliningIndicators/None.gif)
299![](/Images/OutliningIndicators/None.gif)
300
Matrix& Matrix::Multiple(int index,double mul) //初等变换 第index 行乘以mul
301
{
302
if(index <0 || index >= m_row)
303
{
304
ostringstream oss;
305
oss<<"In void Matrix::Multiple(int index,double k) index "<<index<<" out of bounds.Please check it.";
306
throw oss.str();
307
}
308![](/Images/OutliningIndicators/InBlock.gif)
309
transform(m_data[index],m_data[index]+m_col,m_data[index],bind2nd(multiplies<double>(),mul));
310
return *this;
311
}
312![](/Images/OutliningIndicators/None.gif)
313![](/Images/OutliningIndicators/None.gif)
314
Matrix& Matrix::MultipleAdd(int index,int src,double mul) //初等变换 第src行乘以mul加到第index行
315
{
316
if(index <0 || index >= m_row)
317
{
318
ostringstream oss;
319
oss<<"In void MultipleAdd(int index,int src,double k) index "<<index<<" out of bounds.Please check it.";
320
throw oss.str();
321
}
322![](/Images/OutliningIndicators/InBlock.gif)
323
if(src < 0 || src >= m_row)
324
{
325
ostringstream oss;
326
oss<<"In void MultipleAdd(int index,int src,double k) src "<<src<<" out of bounds.Please check it.";
327
throw oss.str();
328
}
329
330
for(int j=0;j<m_col;j++)
331
{
332
m_data[index][j] += m_data[src][j] * mul;
333
}
334![](/Images/OutliningIndicators/InBlock.gif)
335
return *this;
336![](/Images/OutliningIndicators/InBlock.gif)
337
}
338![](/Images/OutliningIndicators/None.gif)
339
340
//inverse 逆阵:使用矩阵的初等变换,列主元素消去法
341
Matrix Matrix::Inverse() const
342
{
343
if(m_row != m_col) //非方阵
344
{
345
ostringstream oss;
346
oss<<"In Matrix Matrix::Invert() const. m_row "<<m_row<<" != m_col "<<m_col<<" Please check it";
347
throw oss.str();
348
}
349![](/Images/OutliningIndicators/InBlock.gif)
350
Matrix tmp(*this);
351
Matrix ret(m_row); //单位阵
352
ret.SetUnit();
353![](/Images/OutliningIndicators/InBlock.gif)
354
int maxIndex;
355
double dMul;
356![](/Images/OutliningIndicators/InBlock.gif)
357
for(int i=0;i<m_row;i++)
358
{
359![](/Images/OutliningIndicators/InBlock.gif)
360
maxIndex = tmp.Pivot(i);
361
362
if(tmp.m_data[maxIndex][i]==0)
363
{
364
ostringstream oss;
365
oss<<"In Matrix Matrix::Invert() const 行列式的值等于0.Please check it";
366
throw oss.str();
367
}
368![](/Images/OutliningIndicators/InBlock.gif)
369
if(maxIndex != i) //下三角阵中此列的最大值不在当前行,交换
370
{
371
tmp.Exchange(i,maxIndex);
372
ret.Exchange(i,maxIndex);
373![](/Images/OutliningIndicators/InBlock.gif)
374
}
375![](/Images/OutliningIndicators/InBlock.gif)
376
ret.Multiple(i,1/tmp.m_data[i][i]);
377
tmp.Multiple(i,1/tmp.m_data[i][i]);
378![](/Images/OutliningIndicators/InBlock.gif)
379![](/Images/OutliningIndicators/InBlock.gif)
380
for(int j=i+1;j<m_row;j++)
381
{
382
dMul = -tmp.m_data[j][i];
383
tmp.MultipleAdd(j,i,dMul);
384
ret.MultipleAdd(j,i,dMul);
385
386
}
387![](/Images/OutliningIndicators/InBlock.gif)
388
}//end for
389![](/Images/OutliningIndicators/InBlock.gif)
390
for(int i=m_row-1;i>0;i--)
391
{
392
for(int j=i-1;j>=0;j--)
393
{
394
dMul = -tmp.m_data[j][i];
395
tmp.MultipleAdd(j,i,dMul);
396
ret.MultipleAdd(j,i,dMul);
397
}
398
}//end for
399
400
return ret;
401
}
402![](/Images/OutliningIndicators/None.gif)
403
404![](/Images/OutliningIndicators/None.gif)
405
// assignment operator 賦值运算符
406
Matrix& Matrix::operator= (const Matrix& m)
407
{
408
if(m_data != 0)
409
{
410
for(int i=0;i<m_row;i++)
411
{
412
delete[] m_data[i];
413
}
414
delete[] m_data;
415
}
416![](/Images/OutliningIndicators/InBlock.gif)
417
m_row = m.m_row;
418
m_col = m.m_col;
419![](/Images/OutliningIndicators/InBlock.gif)
420
m_data = new double*[m_row];
421
for(int i=0;i< m_row;i++)
422
{
423
m_data[i] = new double[m_col];
424
}
425![](/Images/OutliningIndicators/InBlock.gif)
426
for(int i=0;i<m_row;i++)
427
{
428
copy(m.m_data[i],m.m_data[i]+m_col,m_data[i]);
429
}
430
return *this;
431
}
432![](/Images/OutliningIndicators/None.gif)
433![](/Images/OutliningIndicators/None.gif)
434
//binary addition 矩阵加
435
Matrix Matrix::operator+ (const Matrix& m) const
436
{
437
if(m_row != m.m_row)
438
{
439
ostringstream oss;
440
oss<<"In Matrix::operator+(const Matrix& m) this->m_row "<<m_row<<" != m.m_row "<<m.m_row<<" Please check it.";
441
throw oss.str();
442
}
443
if(m_col != m.m_col)
444
{
445
ostringstream oss;
446
oss<<" Matrix::operator+ (const Matrix& m) this->m_col "<<m_col<<" != m.m_col "<<m.m_col<<" Please check it.";
447
throw oss.str();
448
}
449![](/Images/OutliningIndicators/InBlock.gif)
450
Matrix ret(m_row,m_col);
451
for(int i=0;i<m_row;i++)
452
{
453
transform(m_data[i],m_data[i]+m_col,m.m_data[i],ret.m_data[i],plus<double>());
454
}
455
return ret;
456
}
457![](/Images/OutliningIndicators/None.gif)
458
//unary addition 求正
459
Matrix Matrix::operator+() const
460
{
461
return *this;
462
}
463![](/Images/OutliningIndicators/None.gif)
464
//binary subtraction 矩阵减
465
Matrix Matrix::operator- (const Matrix& m) const
466
{
467
if(m_row != m.m_row)
468
{
469
ostringstream oss;
470
oss<<"In Matrix::operator-(const Matrix& m) this->m_row "<<m_row<<" != m.m_row "<<m.m_row<<" Please check it.";
471
throw oss.str();
472
}
473
if(m_col != m.m_col)
474
{
475
ostringstream oss;
476
oss<<"In Matrix::operator- (const Matrix& m) this->m_col "<<m_col<<" != m.m_col "<<m.m_col<<" Please check it.";
477
throw oss.str();
478
}
479![](/Images/OutliningIndicators/InBlock.gif)
480
Matrix ret(m_row,m_col);
481
for(int i=0;i<m_row;i++)
482
{
483
transform(m_data[i],m_data[i]+m_col,m.m_data[i],ret.m_data[i],minus<double>());
484
}
485
return ret;
486
}
487![](/Images/OutliningIndicators/None.gif)
488
//unary substraction 求负
489
Matrix Matrix::operator-() const
490
{
491
Matrix ret(*this);
492![](/Images/OutliningIndicators/InBlock.gif)
493
for(int i=0;i<m_row;i++)
494
for(int j=0;j<m_col;j++)
495
ret.m_data[i][j] *= -1;
496![](/Images/OutliningIndicators/InBlock.gif)
497
return ret;
498![](/Images/OutliningIndicators/InBlock.gif)
499
}
500![](/Images/OutliningIndicators/None.gif)
501![](/Images/OutliningIndicators/None.gif)
502
//binary multiple 矩阵乘
503
Matrix Matrix::operator*(const Matrix& m) const
504
{
505
if(m_col != m.m_row)
506
{
507
ostringstream oss;
508
oss<<"In Matrix::operator*(const Matrix& m) this->m_col "<<m_col<<" != m.m_row "<<m.m_row<<" Please check it.";
509
throw oss.str();
510
}
511![](/Images/OutliningIndicators/InBlock.gif)
512
Matrix ret(m_row,m.m_col);
513
Matrix tmp=m.Transpose();
514![](/Images/OutliningIndicators/InBlock.gif)
515
for(int i=0;i<m_row;i++)
516
{
517
for(int j=0;j<m.m_col;j++)
518
{
519
ret.m_data[i][j]=inner_product(m_data[i],m_data[i]+m_col,tmp.m_data[j],0.0);
520
}
521
}
522![](/Images/OutliningIndicators/InBlock.gif)
523
return ret;;
524
}
525![](/Images/OutliningIndicators/None.gif)
526
//friend scalar multiple 数乘
527
Matrix operator* (double d,const Matrix& m)
528
{
529
Matrix ret(m);
530![](/Images/OutliningIndicators/InBlock.gif)
531
for(int i=0;i<ret.m_row;i++)
532
for(int j=0;j<ret.m_col;j++)
533
ret.m_data[i][j] *= d;
534![](/Images/OutliningIndicators/InBlock.gif)
535
return ret;
536![](/Images/OutliningIndicators/InBlock.gif)
537
}
538![](/Images/OutliningIndicators/None.gif)
539
//binary matrix division equivalent to multiple inverse矩阵除,等价于乘以逆阵
540
Matrix Matrix::operator/(const Matrix& m) const
541
{
542
return *this * m.Inverse();
543
}
544![](/Images/OutliningIndicators/None.gif)
545
//binary scalar division equivalent to multiple reciprocal数除,等价于乘以此数的倒数
546
Matrix Matrix::operator/(double d) const
547
{
548
return 1/d * (*this);
549
}
550![](/Images/OutliningIndicators/None.gif)
551
//friend division
552
Matrix operator/(double d,const Matrix& m)
553
{
554
return d * m.Inverse();
555
}
556![](/Images/OutliningIndicators/None.gif)
557![](/Images/OutliningIndicators/None.gif)
558
// subscript operator to get individual elements 下标运算符
559
double Matrix::operator()(int i,int j) const
560
{
561
if(i<0 || i>= m_row)
562
{
563
ostringstream oss;
564
oss<<"In double Matrix::operator()(int i,int j) const.i "<<i<<" out of bounds.Please check it";
565
throw oss.str();
566
}
567
if(j<0 || j>= m_col)
568
{
569
ostringstream oss;
570
oss<<"In double Matrix::operator()(int i,int j) const.j "<<j<<" out of bounds.Please check it";
571
throw oss.str();
572
}
573![](/Images/OutliningIndicators/InBlock.gif)
574
return m_data[i][j];
575
}
576![](/Images/OutliningIndicators/None.gif)
577
// subscript operator to set individual elements 下标运算符
578
double& Matrix::operator ()(int i,int j)
579
{
580
if(i<0 || i>= m_row)
581
{
582
ostringstream oss;
583
oss<<"In double Matrix::operator()(int i,int j) const.i "<<i<<" out of bounds.Please check it";
584
throw oss.str();
585
}
586
if(j<0 || j>= m_col)
587
{
588
ostringstream oss;
589
oss<<"In double Matrix::operator()(int i,int j) const.j "<<j<<" out of bounds.Please check it";
590
throw oss.str();
591
}
592![](/Images/OutliningIndicators/InBlock.gif)
593
return m_data[i][j];
594
}
595![](/Images/OutliningIndicators/None.gif)
596
//to string 化为标准串
597
string Matrix::ToString() const
598
{
599
ostringstream oss;
600
for(int i=0;i<m_row;i++)
601
{
602
copy(m_data[i],m_data[i]+m_col,ostream_iterator<double>(oss," "));
603
oss<<"\n";
604
}
605![](/Images/OutliningIndicators/InBlock.gif)
606
return oss.str();
607
}
608![](/Images/OutliningIndicators/None.gif)
609
// outputt stream function 输出
610![](/Images/OutliningIndicators/None.gif)
611
ostream& operator<<(ostream& os,const Matrix& m)
612
{
613
for(int i=0;i<m.m_row;i++)
614
{
615
copy(m.m_data[i],m.m_data[i]+m.m_col,ostream_iterator<double>(os," "));
616
os<<'\n';
617
}
618
return os;
619
}
620![](/Images/OutliningIndicators/None.gif)
621
// input stream function 输入
622
istream& operator>>(istream& is,Matrix& m)
623
{
624
for(int i=0;i<m.m_row;i++)
625
{
626
for(int j=0;j<m.m_col;j++)
627
{
628
is>>m.m_data[i][j];
629
}
630
}
631
return is;
632
}
633![](/Images/OutliningIndicators/None.gif)
634![](/Images/OutliningIndicators/None.gif)
635
// reallocation method
636![](/Images/OutliningIndicators/None.gif)
637
// public method for resizing matrix
638![](/Images/OutliningIndicators/None.gif)
639
// logical equal-to operator
640![](/Images/OutliningIndicators/None.gif)
641
// logical no-equal-to operator
642![](/Images/OutliningIndicators/None.gif)
643
// combined addition and assignment operator
644![](/Images/OutliningIndicators/None.gif)
645
// combined subtraction and assignment operator
646![](/Images/OutliningIndicators/None.gif)
647
// combined scalar multiplication and assignment operator
648![](/Images/OutliningIndicators/None.gif)
649![](/Images/OutliningIndicators/None.gif)
650
// combined matrix multiplication and assignment operator
651![](/Images/OutliningIndicators/None.gif)
652
// combined scalar division and assignment operator
653![](/Images/OutliningIndicators/None.gif)
654
// combined power and assignment operator
655![](/Images/OutliningIndicators/None.gif)
656
// unary negation operator
657![](/Images/OutliningIndicators/None.gif)
658
// binary addition operator
659![](/Images/OutliningIndicators/None.gif)
660
// binary subtraction operator
661![](/Images/OutliningIndicators/None.gif)
662
// binary scalar multiplication operator
663![](/Images/OutliningIndicators/None.gif)
664
// binary scalar multiplication operator
665![](/Images/OutliningIndicators/None.gif)
666
// binary matrix multiplication operator
667![](/Images/OutliningIndicators/None.gif)
668
// binary scalar division operator
669![](/Images/OutliningIndicators/None.gif)
670![](/Images/OutliningIndicators/None.gif)
671
// binary scalar division operator
672![](/Images/OutliningIndicators/None.gif)
673
// binary matrix division operator
674![](/Images/OutliningIndicators/None.gif)
675
// binary power operator
676![](/Images/OutliningIndicators/None.gif)
677
// unary transpose operator
678![](/Images/OutliningIndicators/None.gif)
679
// unary Inverse operator
680![](/Images/OutliningIndicators/None.gif)
681
// Inverse function
682![](/Images/OutliningIndicators/None.gif)
683
// solve simultaneous equation
684![](/Images/OutliningIndicators/None.gif)
685
// set zero to all elements of this matrix
686![](/Images/OutliningIndicators/None.gif)
687
// set this matrix to unity
688![](/Images/OutliningIndicators/None.gif)
689
// private partial pivoting method
690![](/Images/OutliningIndicators/None.gif)
691
// calculate the determinant of a matrix
692![](/Images/OutliningIndicators/None.gif)
693
// calculate the norm of a matrix
694![](/Images/OutliningIndicators/None.gif)
695
// calculate the condition number of a matrix
696![](/Images/OutliningIndicators/None.gif)
697
// calculate the cofactor of a matrix for a given element
698![](/Images/OutliningIndicators/None.gif)
699
// calculate adjoin of a matrix
700![](/Images/OutliningIndicators/None.gif)
701
// Determine if the matrix is singular
702![](/Images/OutliningIndicators/None.gif)
703
// Determine if the matrix is diagonal
704![](/Images/OutliningIndicators/None.gif)
705
// Determine if the matrix is scalar
706![](/Images/OutliningIndicators/None.gif)
707
// Determine if the matrix is a unit matrix
708![](/Images/OutliningIndicators/None.gif)
709
// Determine if this is a null matrix
710![](/Images/OutliningIndicators/None.gif)
711
// Determine if the matrix is symmetric
712![](/Images/OutliningIndicators/None.gif)
713
// Determine if the matrix is skew-symmetric
714
// Determine if the matrix is upper triangular
715![](/Images/OutliningIndicators/None.gif)
716
// Determine if the matrix is lower triangular
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/None.gif)
18
![](/Images/OutliningIndicators/None.gif)
19
![](/Images/OutliningIndicators/None.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/None.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/None.gif)
24
![](/Images/OutliningIndicators/None.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/None.gif)
27
![](/Images/OutliningIndicators/None.gif)
28
![](/Images/OutliningIndicators/None.gif)
29
![](/Images/OutliningIndicators/None.gif)
30
![](/Images/OutliningIndicators/None.gif)
31
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
32
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
33
![](/Images/OutliningIndicators/None.gif)
34
![](/Images/OutliningIndicators/None.gif)
35
![](/Images/OutliningIndicators/None.gif)
36
![](/Images/OutliningIndicators/None.gif)
37
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
58
![](/Images/OutliningIndicators/None.gif)
59
![](/Images/OutliningIndicators/None.gif)
60
![](/Images/OutliningIndicators/None.gif)
61
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
88
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
89
![](/Images/OutliningIndicators/None.gif)
90
![](/Images/OutliningIndicators/None.gif)
91
![](/Images/OutliningIndicators/None.gif)
92
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
105
![](/Images/OutliningIndicators/None.gif)
106
![](/Images/OutliningIndicators/None.gif)
107
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
116
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
117
![](/Images/OutliningIndicators/None.gif)
118
![](/Images/OutliningIndicators/None.gif)
119
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
123
![](/Images/OutliningIndicators/None.gif)
124
![](/Images/OutliningIndicators/None.gif)
125
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
130
![](/Images/OutliningIndicators/None.gif)
131
![](/Images/OutliningIndicators/None.gif)
132
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
136
![](/Images/OutliningIndicators/None.gif)
137
![](/Images/OutliningIndicators/None.gif)
138
![](/Images/OutliningIndicators/None.gif)
139
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
143
![](/Images/OutliningIndicators/None.gif)
144
![](/Images/OutliningIndicators/None.gif)
145
![](/Images/OutliningIndicators/None.gif)
146
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
161
![](/Images/OutliningIndicators/None.gif)
162
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/InBlock.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/InBlock.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/InBlock.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
202
![](/Images/OutliningIndicators/None.gif)
203
![](/Images/OutliningIndicators/None.gif)
204
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/InBlock.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/InBlock.gif)
219
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
234
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
235
![](/Images/OutliningIndicators/None.gif)
236
![](/Images/OutliningIndicators/None.gif)
237
![](/Images/OutliningIndicators/None.gif)
238
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
241
![](/Images/OutliningIndicators/None.gif)
242
![](/Images/OutliningIndicators/None.gif)
243
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
246
![](/Images/OutliningIndicators/None.gif)
247
![](/Images/OutliningIndicators/None.gif)
248
![](/Images/OutliningIndicators/None.gif)
249
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
250
![](/Images/OutliningIndicators/InBlock.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
253
![](/Images/OutliningIndicators/InBlock.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
257
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
258
![](/Images/OutliningIndicators/InBlock.gif)
259
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
260
![](/Images/OutliningIndicators/None.gif)
261
![](/Images/OutliningIndicators/None.gif)
262
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
263
![](/Images/OutliningIndicators/InBlock.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
267
![](/Images/OutliningIndicators/InBlock.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
270
![](/Images/OutliningIndicators/InBlock.gif)
271
![](/Images/OutliningIndicators/InBlock.gif)
272
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
273
![](/Images/OutliningIndicators/None.gif)
274
![](/Images/OutliningIndicators/None.gif)
275
![](/Images/OutliningIndicators/None.gif)
276
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
279
![](/Images/OutliningIndicators/InBlock.gif)
280
![](/Images/OutliningIndicators/InBlock.gif)
281
![](/Images/OutliningIndicators/InBlock.gif)
282
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
283
![](/Images/OutliningIndicators/InBlock.gif)
284
![](/Images/OutliningIndicators/InBlock.gif)
285
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
286
![](/Images/OutliningIndicators/InBlock.gif)
287
![](/Images/OutliningIndicators/InBlock.gif)
288
![](/Images/OutliningIndicators/InBlock.gif)
289
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
290
![](/Images/OutliningIndicators/InBlock.gif)
291
![](/Images/OutliningIndicators/InBlock.gif)
292
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
293
![](/Images/OutliningIndicators/InBlock.gif)
294
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
295
![](/Images/OutliningIndicators/InBlock.gif)
296
![](/Images/OutliningIndicators/InBlock.gif)
297
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
298
![](/Images/OutliningIndicators/None.gif)
299
![](/Images/OutliningIndicators/None.gif)
300
![](/Images/OutliningIndicators/None.gif)
301
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
302
![](/Images/OutliningIndicators/InBlock.gif)
303
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
304
![](/Images/OutliningIndicators/InBlock.gif)
305
![](/Images/OutliningIndicators/InBlock.gif)
306
![](/Images/OutliningIndicators/InBlock.gif)
307
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
308
![](/Images/OutliningIndicators/InBlock.gif)
309
![](/Images/OutliningIndicators/InBlock.gif)
310
![](/Images/OutliningIndicators/InBlock.gif)
311
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
312
![](/Images/OutliningIndicators/None.gif)
313
![](/Images/OutliningIndicators/None.gif)
314
![](/Images/OutliningIndicators/None.gif)
315
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
316
![](/Images/OutliningIndicators/InBlock.gif)
317
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
318
![](/Images/OutliningIndicators/InBlock.gif)
319
![](/Images/OutliningIndicators/InBlock.gif)
320
![](/Images/OutliningIndicators/InBlock.gif)
321
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
322
![](/Images/OutliningIndicators/InBlock.gif)
323
![](/Images/OutliningIndicators/InBlock.gif)
324
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
325
![](/Images/OutliningIndicators/InBlock.gif)
326
![](/Images/OutliningIndicators/InBlock.gif)
327
![](/Images/OutliningIndicators/InBlock.gif)
328
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
329
![](/Images/OutliningIndicators/InBlock.gif)
330
![](/Images/OutliningIndicators/InBlock.gif)
331
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
332
![](/Images/OutliningIndicators/InBlock.gif)
333
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
334
![](/Images/OutliningIndicators/InBlock.gif)
335
![](/Images/OutliningIndicators/InBlock.gif)
336
![](/Images/OutliningIndicators/InBlock.gif)
337
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
338
![](/Images/OutliningIndicators/None.gif)
339
![](/Images/OutliningIndicators/None.gif)
340
![](/Images/OutliningIndicators/None.gif)
341
![](/Images/OutliningIndicators/None.gif)
342
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
343
![](/Images/OutliningIndicators/InBlock.gif)
344
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
345
![](/Images/OutliningIndicators/InBlock.gif)
346
![](/Images/OutliningIndicators/InBlock.gif)
347
![](/Images/OutliningIndicators/InBlock.gif)
348
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
349
![](/Images/OutliningIndicators/InBlock.gif)
350
![](/Images/OutliningIndicators/InBlock.gif)
351
![](/Images/OutliningIndicators/InBlock.gif)
352
![](/Images/OutliningIndicators/InBlock.gif)
353
![](/Images/OutliningIndicators/InBlock.gif)
354
![](/Images/OutliningIndicators/InBlock.gif)
355
![](/Images/OutliningIndicators/InBlock.gif)
356
![](/Images/OutliningIndicators/InBlock.gif)
357
![](/Images/OutliningIndicators/InBlock.gif)
358
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
359
![](/Images/OutliningIndicators/InBlock.gif)
360
![](/Images/OutliningIndicators/InBlock.gif)
361
![](/Images/OutliningIndicators/InBlock.gif)
362
![](/Images/OutliningIndicators/InBlock.gif)
363
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
364
![](/Images/OutliningIndicators/InBlock.gif)
365
![](/Images/OutliningIndicators/InBlock.gif)
366
![](/Images/OutliningIndicators/InBlock.gif)
367
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
368
![](/Images/OutliningIndicators/InBlock.gif)
369
![](/Images/OutliningIndicators/InBlock.gif)
370
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
371
![](/Images/OutliningIndicators/InBlock.gif)
372
![](/Images/OutliningIndicators/InBlock.gif)
373
![](/Images/OutliningIndicators/InBlock.gif)
374
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
375
![](/Images/OutliningIndicators/InBlock.gif)
376
![](/Images/OutliningIndicators/InBlock.gif)
377
![](/Images/OutliningIndicators/InBlock.gif)
378
![](/Images/OutliningIndicators/InBlock.gif)
379
![](/Images/OutliningIndicators/InBlock.gif)
380
![](/Images/OutliningIndicators/InBlock.gif)
381
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
382
![](/Images/OutliningIndicators/InBlock.gif)
383
![](/Images/OutliningIndicators/InBlock.gif)
384
![](/Images/OutliningIndicators/InBlock.gif)
385
![](/Images/OutliningIndicators/InBlock.gif)
386
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
387
![](/Images/OutliningIndicators/InBlock.gif)
388
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
389
![](/Images/OutliningIndicators/InBlock.gif)
390
![](/Images/OutliningIndicators/InBlock.gif)
391
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
392
![](/Images/OutliningIndicators/InBlock.gif)
393
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
394
![](/Images/OutliningIndicators/InBlock.gif)
395
![](/Images/OutliningIndicators/InBlock.gif)
396
![](/Images/OutliningIndicators/InBlock.gif)
397
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
398
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
399
![](/Images/OutliningIndicators/InBlock.gif)
400
![](/Images/OutliningIndicators/InBlock.gif)
401
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
402
![](/Images/OutliningIndicators/None.gif)
403
![](/Images/OutliningIndicators/None.gif)
404
![](/Images/OutliningIndicators/None.gif)
405
![](/Images/OutliningIndicators/None.gif)
406
![](/Images/OutliningIndicators/None.gif)
407
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
408
![](/Images/OutliningIndicators/InBlock.gif)
409
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
410
![](/Images/OutliningIndicators/InBlock.gif)
411
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
412
![](/Images/OutliningIndicators/InBlock.gif)
413
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
414
![](/Images/OutliningIndicators/InBlock.gif)
415
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
416
![](/Images/OutliningIndicators/InBlock.gif)
417
![](/Images/OutliningIndicators/InBlock.gif)
418
![](/Images/OutliningIndicators/InBlock.gif)
419
![](/Images/OutliningIndicators/InBlock.gif)
420
![](/Images/OutliningIndicators/InBlock.gif)
421
![](/Images/OutliningIndicators/InBlock.gif)
422
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
423
![](/Images/OutliningIndicators/InBlock.gif)
424
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
425
![](/Images/OutliningIndicators/InBlock.gif)
426
![](/Images/OutliningIndicators/InBlock.gif)
427
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
428
![](/Images/OutliningIndicators/InBlock.gif)
429
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
430
![](/Images/OutliningIndicators/InBlock.gif)
431
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
432
![](/Images/OutliningIndicators/None.gif)
433
![](/Images/OutliningIndicators/None.gif)
434
![](/Images/OutliningIndicators/None.gif)
435
![](/Images/OutliningIndicators/None.gif)
436
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
437
![](/Images/OutliningIndicators/InBlock.gif)
438
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
439
![](/Images/OutliningIndicators/InBlock.gif)
440
![](/Images/OutliningIndicators/InBlock.gif)
441
![](/Images/OutliningIndicators/InBlock.gif)
442
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
443
![](/Images/OutliningIndicators/InBlock.gif)
444
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
445
![](/Images/OutliningIndicators/InBlock.gif)
446
![](/Images/OutliningIndicators/InBlock.gif)
447
![](/Images/OutliningIndicators/InBlock.gif)
448
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
449
![](/Images/OutliningIndicators/InBlock.gif)
450
![](/Images/OutliningIndicators/InBlock.gif)
451
![](/Images/OutliningIndicators/InBlock.gif)
452
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
453
![](/Images/OutliningIndicators/InBlock.gif)
454
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
455
![](/Images/OutliningIndicators/InBlock.gif)
456
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
457
![](/Images/OutliningIndicators/None.gif)
458
![](/Images/OutliningIndicators/None.gif)
459
![](/Images/OutliningIndicators/None.gif)
460
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
461
![](/Images/OutliningIndicators/InBlock.gif)
462
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
463
![](/Images/OutliningIndicators/None.gif)
464
![](/Images/OutliningIndicators/None.gif)
465
![](/Images/OutliningIndicators/None.gif)
466
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
467
![](/Images/OutliningIndicators/InBlock.gif)
468
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
469
![](/Images/OutliningIndicators/InBlock.gif)
470
![](/Images/OutliningIndicators/InBlock.gif)
471
![](/Images/OutliningIndicators/InBlock.gif)
472
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
473
![](/Images/OutliningIndicators/InBlock.gif)
474
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
475
![](/Images/OutliningIndicators/InBlock.gif)
476
![](/Images/OutliningIndicators/InBlock.gif)
477
![](/Images/OutliningIndicators/InBlock.gif)
478
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
479
![](/Images/OutliningIndicators/InBlock.gif)
480
![](/Images/OutliningIndicators/InBlock.gif)
481
![](/Images/OutliningIndicators/InBlock.gif)
482
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
483
![](/Images/OutliningIndicators/InBlock.gif)
484
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
485
![](/Images/OutliningIndicators/InBlock.gif)
486
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
487
![](/Images/OutliningIndicators/None.gif)
488
![](/Images/OutliningIndicators/None.gif)
489
![](/Images/OutliningIndicators/None.gif)
490
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
491
![](/Images/OutliningIndicators/InBlock.gif)
492
![](/Images/OutliningIndicators/InBlock.gif)
493
![](/Images/OutliningIndicators/InBlock.gif)
494
![](/Images/OutliningIndicators/InBlock.gif)
495
![](/Images/OutliningIndicators/InBlock.gif)
496
![](/Images/OutliningIndicators/InBlock.gif)
497
![](/Images/OutliningIndicators/InBlock.gif)
498
![](/Images/OutliningIndicators/InBlock.gif)
499
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
500
![](/Images/OutliningIndicators/None.gif)
501
![](/Images/OutliningIndicators/None.gif)
502
![](/Images/OutliningIndicators/None.gif)
503
![](/Images/OutliningIndicators/None.gif)
504
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
505
![](/Images/OutliningIndicators/InBlock.gif)
506
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
507
![](/Images/OutliningIndicators/InBlock.gif)
508
![](/Images/OutliningIndicators/InBlock.gif)
509
![](/Images/OutliningIndicators/InBlock.gif)
510
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
511
![](/Images/OutliningIndicators/InBlock.gif)
512
![](/Images/OutliningIndicators/InBlock.gif)
513
![](/Images/OutliningIndicators/InBlock.gif)
514
![](/Images/OutliningIndicators/InBlock.gif)
515
![](/Images/OutliningIndicators/InBlock.gif)
516
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
517
![](/Images/OutliningIndicators/InBlock.gif)
518
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
519
![](/Images/OutliningIndicators/InBlock.gif)
520
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
521
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
522
![](/Images/OutliningIndicators/InBlock.gif)
523
![](/Images/OutliningIndicators/InBlock.gif)
524
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
525
![](/Images/OutliningIndicators/None.gif)
526
![](/Images/OutliningIndicators/None.gif)
527
![](/Images/OutliningIndicators/None.gif)
528
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
529
![](/Images/OutliningIndicators/InBlock.gif)
530
![](/Images/OutliningIndicators/InBlock.gif)
531
![](/Images/OutliningIndicators/InBlock.gif)
532
![](/Images/OutliningIndicators/InBlock.gif)
533
![](/Images/OutliningIndicators/InBlock.gif)
534
![](/Images/OutliningIndicators/InBlock.gif)
535
![](/Images/OutliningIndicators/InBlock.gif)
536
![](/Images/OutliningIndicators/InBlock.gif)
537
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
538
![](/Images/OutliningIndicators/None.gif)
539
![](/Images/OutliningIndicators/None.gif)
540
![](/Images/OutliningIndicators/None.gif)
541
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
542
![](/Images/OutliningIndicators/InBlock.gif)
543
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
544
![](/Images/OutliningIndicators/None.gif)
545
![](/Images/OutliningIndicators/None.gif)
546
![](/Images/OutliningIndicators/None.gif)
547
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
548
![](/Images/OutliningIndicators/InBlock.gif)
549
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
550
![](/Images/OutliningIndicators/None.gif)
551
![](/Images/OutliningIndicators/None.gif)
552
![](/Images/OutliningIndicators/None.gif)
553
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
554
![](/Images/OutliningIndicators/InBlock.gif)
555
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
556
![](/Images/OutliningIndicators/None.gif)
557
![](/Images/OutliningIndicators/None.gif)
558
![](/Images/OutliningIndicators/None.gif)
559
![](/Images/OutliningIndicators/None.gif)
560
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
561
![](/Images/OutliningIndicators/InBlock.gif)
562
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
563
![](/Images/OutliningIndicators/InBlock.gif)
564
![](/Images/OutliningIndicators/InBlock.gif)
565
![](/Images/OutliningIndicators/InBlock.gif)
566
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
567
![](/Images/OutliningIndicators/InBlock.gif)
568
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
569
![](/Images/OutliningIndicators/InBlock.gif)
570
![](/Images/OutliningIndicators/InBlock.gif)
571
![](/Images/OutliningIndicators/InBlock.gif)
572
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
573
![](/Images/OutliningIndicators/InBlock.gif)
574
![](/Images/OutliningIndicators/InBlock.gif)
575
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
576
![](/Images/OutliningIndicators/None.gif)
577
![](/Images/OutliningIndicators/None.gif)
578
![](/Images/OutliningIndicators/None.gif)
579
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
580
![](/Images/OutliningIndicators/InBlock.gif)
581
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
582
![](/Images/OutliningIndicators/InBlock.gif)
583
![](/Images/OutliningIndicators/InBlock.gif)
584
![](/Images/OutliningIndicators/InBlock.gif)
585
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
586
![](/Images/OutliningIndicators/InBlock.gif)
587
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
588
![](/Images/OutliningIndicators/InBlock.gif)
589
![](/Images/OutliningIndicators/InBlock.gif)
590
![](/Images/OutliningIndicators/InBlock.gif)
591
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
592
![](/Images/OutliningIndicators/InBlock.gif)
593
![](/Images/OutliningIndicators/InBlock.gif)
594
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
595
![](/Images/OutliningIndicators/None.gif)
596
![](/Images/OutliningIndicators/None.gif)
597
![](/Images/OutliningIndicators/None.gif)
598
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
599
![](/Images/OutliningIndicators/InBlock.gif)
600
![](/Images/OutliningIndicators/InBlock.gif)
601
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
602
![](/Images/OutliningIndicators/InBlock.gif)
603
![](/Images/OutliningIndicators/InBlock.gif)
604
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
605
![](/Images/OutliningIndicators/InBlock.gif)
606
![](/Images/OutliningIndicators/InBlock.gif)
607
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
608
![](/Images/OutliningIndicators/None.gif)
609
![](/Images/OutliningIndicators/None.gif)
610
![](/Images/OutliningIndicators/None.gif)
611
![](/Images/OutliningIndicators/None.gif)
612
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
613
![](/Images/OutliningIndicators/InBlock.gif)
614
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
615
![](/Images/OutliningIndicators/InBlock.gif)
616
![](/Images/OutliningIndicators/InBlock.gif)
617
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
618
![](/Images/OutliningIndicators/InBlock.gif)
619
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
620
![](/Images/OutliningIndicators/None.gif)
621
![](/Images/OutliningIndicators/None.gif)
622
![](/Images/OutliningIndicators/None.gif)
623
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
624
![](/Images/OutliningIndicators/InBlock.gif)
625
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
626
![](/Images/OutliningIndicators/InBlock.gif)
627
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
628
![](/Images/OutliningIndicators/InBlock.gif)
629
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
630
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
631
![](/Images/OutliningIndicators/InBlock.gif)
632
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
633
![](/Images/OutliningIndicators/None.gif)
634
![](/Images/OutliningIndicators/None.gif)
635
![](/Images/OutliningIndicators/None.gif)
636
![](/Images/OutliningIndicators/None.gif)
637
![](/Images/OutliningIndicators/None.gif)
638
![](/Images/OutliningIndicators/None.gif)
639
![](/Images/OutliningIndicators/None.gif)
640
![](/Images/OutliningIndicators/None.gif)
641
![](/Images/OutliningIndicators/None.gif)
642
![](/Images/OutliningIndicators/None.gif)
643
![](/Images/OutliningIndicators/None.gif)
644
![](/Images/OutliningIndicators/None.gif)
645
![](/Images/OutliningIndicators/None.gif)
646
![](/Images/OutliningIndicators/None.gif)
647
![](/Images/OutliningIndicators/None.gif)
648
![](/Images/OutliningIndicators/None.gif)
649
![](/Images/OutliningIndicators/None.gif)
650
![](/Images/OutliningIndicators/None.gif)
651
![](/Images/OutliningIndicators/None.gif)
652
![](/Images/OutliningIndicators/None.gif)
653
![](/Images/OutliningIndicators/None.gif)
654
![](/Images/OutliningIndicators/None.gif)
655
![](/Images/OutliningIndicators/None.gif)
656
![](/Images/OutliningIndicators/None.gif)
657
![](/Images/OutliningIndicators/None.gif)
658
![](/Images/OutliningIndicators/None.gif)
659
![](/Images/OutliningIndicators/None.gif)
660
![](/Images/OutliningIndicators/None.gif)
661
![](/Images/OutliningIndicators/None.gif)
662
![](/Images/OutliningIndicators/None.gif)
663
![](/Images/OutliningIndicators/None.gif)
664
![](/Images/OutliningIndicators/None.gif)
665
![](/Images/OutliningIndicators/None.gif)
666
![](/Images/OutliningIndicators/None.gif)
667
![](/Images/OutliningIndicators/None.gif)
668
![](/Images/OutliningIndicators/None.gif)
669
![](/Images/OutliningIndicators/None.gif)
670
![](/Images/OutliningIndicators/None.gif)
671
![](/Images/OutliningIndicators/None.gif)
672
![](/Images/OutliningIndicators/None.gif)
673
![](/Images/OutliningIndicators/None.gif)
674
![](/Images/OutliningIndicators/None.gif)
675
![](/Images/OutliningIndicators/None.gif)
676
![](/Images/OutliningIndicators/None.gif)
677
![](/Images/OutliningIndicators/None.gif)
678
![](/Images/OutliningIndicators/None.gif)
679
![](/Images/OutliningIndicators/None.gif)
680
![](/Images/OutliningIndicators/None.gif)
681
![](/Images/OutliningIndicators/None.gif)
682
![](/Images/OutliningIndicators/None.gif)
683
![](/Images/OutliningIndicators/None.gif)
684
![](/Images/OutliningIndicators/None.gif)
685
![](/Images/OutliningIndicators/None.gif)
686
![](/Images/OutliningIndicators/None.gif)
687
![](/Images/OutliningIndicators/None.gif)
688
![](/Images/OutliningIndicators/None.gif)
689
![](/Images/OutliningIndicators/None.gif)
690
![](/Images/OutliningIndicators/None.gif)
691
![](/Images/OutliningIndicators/None.gif)
692
![](/Images/OutliningIndicators/None.gif)
693
![](/Images/OutliningIndicators/None.gif)
694
![](/Images/OutliningIndicators/None.gif)
695
![](/Images/OutliningIndicators/None.gif)
696
![](/Images/OutliningIndicators/None.gif)
697
![](/Images/OutliningIndicators/None.gif)
698
![](/Images/OutliningIndicators/None.gif)
699
![](/Images/OutliningIndicators/None.gif)
700
![](/Images/OutliningIndicators/None.gif)
701
![](/Images/OutliningIndicators/None.gif)
702
![](/Images/OutliningIndicators/None.gif)
703
![](/Images/OutliningIndicators/None.gif)
704
![](/Images/OutliningIndicators/None.gif)
705
![](/Images/OutliningIndicators/None.gif)
706
![](/Images/OutliningIndicators/None.gif)
707
![](/Images/OutliningIndicators/None.gif)
708
![](/Images/OutliningIndicators/None.gif)
709
![](/Images/OutliningIndicators/None.gif)
710
![](/Images/OutliningIndicators/None.gif)
711
![](/Images/OutliningIndicators/None.gif)
712
![](/Images/OutliningIndicators/None.gif)
713
![](/Images/OutliningIndicators/None.gif)
714
![](/Images/OutliningIndicators/None.gif)
715
![](/Images/OutliningIndicators/None.gif)
716
![](/Images/OutliningIndicators/None.gif)
另有标准C语言版本。