1 #ifndef SZA_UTIL_VECTOR_H
2 #define SZA_UTIL_VECTOR_H
30 std::ostream& operator<<(std::ostream& os,
31 const Vector<type>& vec);
33 std::ostringstream& operator<<(std::ostringstream& os,
34 const Vector<type>& vec);
49 Vector(type el0, type el1, type el2);
54 Vector(
const Vector<type>& vec);
64 inline unsigned size() {
76 type& operator[](
unsigned i);
86 const type operator*(
const Vector<type>& vec);
87 const Vector<double> operator*(
double factor);
92 const Vector<type> operator+(
const Vector<type>& vec);
97 const Vector<type> operator-(
const Vector<type>& vec);
102 const Vector<double> operator/(
const type factor);
107 const Vector<type> operator+(
const type offset);
112 const Vector<type> operator-(
const type offset);
114 void add(Vector<type> vec);
115 void push_back(type el);
124 friend std::ostream& operator << <>
125 (std::ostream& os,
const Vector<type>& vec);
130 friend std::ostringstream& operator << <>
131 (std::ostringstream& os,
const Vector<type>& vec);
141 inline void resize(
unsigned n) {
149 std::vector<type> data_;
154 friend class Matrix<type>;
163 Vector<type>::Vector() {}
169 Vector<type>::Vector(type el0, type el1, type el2)
182 Vector<type>::Vector(
unsigned n)
191 Vector<type>::Vector(
const Vector<type>& vec)
193 data_.resize(vec.data_.size());
194 for(
unsigned i=0; i < vec.data_.size(); i++)
195 data_[i] = vec.data_[i];
218 Vector<type>::~Vector() {}
223 template <
class type>
224 double Vector<type>::magnitude()
228 for(
unsigned iel=0; iel < data_.size(); iel++)
229 sum += data_[iel]*data_[iel];
238 type& Vector<type>::operator[](
unsigned i)
242 if(i > data_.size()-1) {
243 errStr.initMessage(
true);
244 errStr <<
"Vector has no element: " << i;
256 const type Vector<type>::operator*(
const Vector<type>& vec)
258 if(data_.size()==0 || vec.data_.size()==0) {
259 ThrowError(
"Received vector size of zero");
262 if(data_.size() != vec.data_.size()) {
263 ThrowError(
"Vectors must have the same size");
268 for(
unsigned i=0; i < data_.size(); i++) {
270 sum = data_[i] * vec.data_[i];
273 sum += data_[i] * vec.data_[i];
280 void Vector<type>::push_back(type el)
286 void Vector<type>::add(Vector<type> vec)
288 data_.resize(data_.size() + vec.size());
289 data_.insert(data_.end(), vec.data_.begin(), vec.data_.end());
297 Vector<type>::operator+(
const Vector<type>& vec)
301 if(data_.size()==0 || vec.data_.size()==0) {
302 errStr.appendMessage(
true,
"Received vector size of zero");
307 if(data_.size() != vec.data_.size()) {
308 errStr.appendMessage(
true,
"Vectors must have the same size");
313 Vector<type> result(data_.size());
315 for(
unsigned i=0; i < data_.size(); i++)
316 result.data_[i] = (data_[i] + vec.data_[i]);
326 Vector<type>::operator-(
const Vector<type>& vec)
330 if(data_.size()==0 || vec.data_.size()==0) {
331 errStr.appendMessage(
true,
"Received vector size of zero");
336 if(data_.size() != vec.data_.size()) {
337 errStr.appendMessage(
true,
"Vectors must have the same size");
342 Vector<type> result(data_.size());
344 for(
unsigned i=0; i < data_.size(); i++)
345 result.data_[i] = (data_[i] - vec.data_[i]);
355 Vector<type>::operator/(
const type factor)
357 if(data_.size()==0) {
358 ThrowError(
"Vector has size zero");
361 Vector<double> result(data_.size());
363 for(
unsigned i=0; i < data_.size(); i++)
364 result[i] = (data_[i] / factor);
374 Vector<type>::operator*(
double factor)
376 if(data_.size()==0) {
377 ThrowError(
"Vector has size zero");
380 Vector<double> result(data_.size());
382 for(
unsigned i=0; i < data_.size(); i++)
383 result[i] = (data_[i] * factor);
393 Vector<type>::operator+(
const type offset)
397 if(data_.size()==0) {
398 errStr.appendMessage(
true,
"Received vector size of zero");
403 Vector<type> result(data_.size());
405 for(
unsigned i=0; i < data_.size(); i++)
406 result.data_[i] = (data_[i] + offset);
416 Vector<type>::operator-(
const type offset)
420 if(data_.size()==0) {
421 errStr.appendMessage(
true,
"Vector has size of zero");
426 Vector<type> result(data_.size());
428 for(
unsigned i=0; i < data_.size(); i++)
429 result.data_[i] = (data_[i] - offset);
437 template <
class type>
438 std::ostream& operator<<(std::ostream& os,
439 const Vector<type>& vec)
442 for(
unsigned i=0; i < vec.data_.size(); i++) {
445 os << std::setw(18) << std::setprecision(12) << vec.data_[i];
447 os <<
")" << std::ends;
455 template <
class type>
456 std::ostringstream& operator<<(std::ostringstream& os,
457 const Vector<type>& vec)
460 for(
unsigned i=0; i < vec.data_.size(); i++) {
463 os << std::setw(18) << std::setprecision(12) << vec.data_[i];
465 os <<
")" << std::ends;
473 #endif // End #ifndef SZA_UTIL_VECTOR_H
Started: Sun Dec 14 07:19:50 UTC 2003.
Tagged: Fri Nov 14 12:39:33 UTC 2003.