Templates -- Meow
1.1.2
不能,也不應該先編譯成obj-file的templates
Vector.h
Go to the documentation of this file.
1
#ifndef math_Vector_H__
2
#define math_Vector_H__
3
4
#include "../Self.h"
5
#include "
Matrix.h
"
6
#include "
utility.h
"
7
8
#include <vector>
9
10
#include <cmath>
11
12
namespace
meow {
13
19
template
<
class
Scalar>
20
class
Vector
{
21
private
:
22
Matrix<Scalar>
matrix_;
23
public
:
29
Vector
(){
30
}
31
39
Vector
(
Vector
const
& v) {
40
matrix_.
copyFrom
(v.matrix_);
41
}
42
50
Vector
(
Matrix<Scalar>
const
& m) {
51
matrix_.
copyFrom
(m.
col
(0));
52
}
53
62
Vector
(
Matrix<Scalar>
const
& m,
size_t
i) {
63
matrix_.
copyFrom
(m.
col
(i));
64
}
65
73
Vector
(std::vector<Scalar>
const
& v) {
74
matrix_.
size
(v.size(), 1, Scalar(0));
75
for
(
size_t
i = 0, I = v.size(); i < I; i++) {
76
matrix_.
entry
(i, 0, v[i]);
77
}
78
}
79
88
Vector
(
size_t
d, Scalar
const
& e) {
89
matrix_.
reset
(d, 1, e);
90
}
91
93
~Vector
(){
94
}
95
97
Vector
&
copyFrom
(
Vector
const
& v) {
98
matrix_.
copyFrom
(v.matrix_);
99
return
*
this
;
100
}
101
103
Vector
&
referenceFrom
(
Vector
const
& v) {
104
matrix_.
referenceFrom
(v.matrix_);
105
return
*
this
;
106
}
107
109
Matrix<Scalar>
const
&
matrix
()
const
{
110
return
matrix_;
111
}
112
114
size_t
dimension
()
const
{
115
return
matrix_.
rows
();
116
}
117
125
size_t
dimension
(
size_t
d, Scalar
const
& s) {
126
matrix_.
rows
(d, s);
127
return
dimension
();
128
}
129
134
bool
valid
()
const
{
135
return
(
dimension
() > 0);
136
}
137
139
Scalar
entry
(
size_t
i)
const
{
140
return
matrix_.
entry
(i, 0);
141
}
142
149
Scalar
entry
(
size_t
i, Scalar
const
& s) {
150
matrix_.
entry
(i, 0, s);
151
return
entry
(i);
152
}
153
161
void
entries
(
size_t
i,
size_t
j, Scalar
const
& s) {
162
for
(
size_t
it = i; it <= j; it++) {
163
matrix_.
entry
(it, 0, s);
164
}
165
}
166
168
Vector
subVector
(
size_t
i,
size_t
j) {
169
return
Vector
(matrix_.
subMatrix
(i, 0, j, 0));
170
}
171
173
Vector
positive
()
const
{
174
return
*
this
;
175
}
176
178
Vector
negative
()
const
{
179
return
Vector
(matrix_.
negative
());
180
}
181
183
Vector
add
(
Vector
const
& v)
const
{
184
return
Vector
(matrix_.
add
(v.matrix_));
185
}
186
188
Vector
sub
(
Vector
const
& v)
const
{
189
return
Vector
(matrix_.
sub
(v.matrix_));
190
}
191
193
Vector
mul
(Scalar
const
& s)
const
{
194
return
Vector
(matrix_.
mul
(s));
195
}
196
198
Vector
div
(Scalar
const
& s)
const
{
199
return
Vector
(matrix_.
div
(s));
200
}
201
203
Scalar
dot
(
Vector
const
& v)
const
{
204
return
matrix_.
transpose
().
mul
(v.matrix_).
entry
(0, 0);
205
}
206
208
Scalar
length
()
const
{
209
return
Scalar(sqrt((
double
)
length2
()));
210
}
211
213
Scalar
length2
()
const
{
214
return
dot
(*
this
);
215
}
216
218
Vector
normalize
()
const
{
219
return
div
(
length
());
220
}
221
223
Vector
&
normalized
() {
224
copyFrom
(
normalize
());
225
return
*
this
;
226
}
227
229
Vector
&
operator=
(
Vector
const
& v) {
230
return
copyFrom
(v);
231
}
232
234
Scalar
operator()
(
size_t
i)
const
{
235
return
entry
(i);
236
}
237
239
Vector
operator+
()
const
{
240
return
positive
();
241
}
242
244
Vector
operator-
()
const
{
245
return
negative
();
246
}
247
249
Vector
operator+
(
Vector
const
& v)
const
{
250
return
add
(v);
251
}
252
254
Vector
operator-
(
Vector
const
& v)
const
{
255
return
sub
(v);
256
}
257
259
Scalar
operator*
(
Vector
const
& v)
const
{
260
return
dot
(v);
261
}
262
264
Vector
operator*
(Scalar
const
& s)
const
{
265
return
mul
(s);
266
}
267
269
Vector
operator/
(Scalar
const
& s)
const
{
270
return
div
(s);
271
}
272
};
273
274
}
275
276
#endif // math_Vector_H__
meowpp
math
Vector.h
Generated on Sun Jun 1 2014 13:54:33 for Templates -- Meow by
1.8.3.1