1 JVector<F> operator*= (F scalar) {
3 for(unsigned int i=0; i<underlying_vector.size(); i++) {
4 underlying_vector[i]*=scalar;
10 JVector<F> operator* (F scalar) {
12 for(unsigned int i=0; i<underlying_vector.size(); i++) {
13 underlying_vector[i]*=scalar;
19 JVector<F> operator+= (F scalar) {
21 for(unsigned int i=0; i<underlying_vector.size(); i++) {
22 underlying_vector[i]+=scalar;
28 friend bool operator== (JVector<F>& vector_a, JVector<F>& vector_b) {
30 return ( vector_a.underlying_vector == vector_b.underlying_vector);
34 friend bool operator!= (JVector<F>& vector_a, JVector<F>& vector_b) {
36 return ( vector_a.underlying_vector != vector_b.underlying_vector);
40 friend std::ostream& operator << (std::ostream& stream, JVector<F>& spectrum) {
42 for(unsigned int i=0; i<spectrum.size(); i++) {
43 stream << spectrum.underlying_vector[i] << std::endl;
50 friend std::ofstream& operator << (std::ofstream& stream, JVector<F>& spectrum) {
52 for(unsigned int i=0; i<spectrum.size(); i++) {
53 stream << spectrum.underlying_vector[i] << std::endl;
60 friend JVector<F> operator+ (JVector<F>& vector_a, JVector<F>& vector_b) {
62 if( vector_a.size() != vector_b.size() ) {
63 std::string err_mesg = __FUNCTION__ ;
64 err_mesg += "\nJVectors are not the same size";
65 err_mesg += boost::lexical_cast<std::string> (vector_a.size());
67 err_mesg += boost::lexical_cast<std::string> (vector_b.size());
68 throw std::length_error(err_mesg);
71 auto vector_c = vector_a;
73 std::transform(vector_c.underlying_vector.begin(),\
74 vector_c.underlying_vector.end(),\
75 vector_b.underlying_vector.begin(),\
76 vector_c.underlying_vector.begin(),\
83 friend JVector<F> operator+ (JVector<F>& vector_a, std::vector<F>& vector_b) {
85 if( vector_a.size() != vector_b.size() ) {
86 std::string err_mesg = "JVector and vector are not the same size ";
87 err_mesg += boost::lexical_cast<std::string> (vector_a.size());
89 err_mesg += boost::lexical_cast<std::string> (vector_b.size());
90 throw std::length_error(err_mesg);
93 auto vector_c = vector_a;
95 vector_c.underlying_vector.resize(vector_b.size());
97 std::transform(vector_c.underlying_vector.begin(),\
98 vector_c.underlying_vector.end(),\
100 vector_c.underlying_vector.begin(),\
106 friend JVector<F> operator- (JVector<F>& vector_a, JVector<F>& vector_b) {
108 if( vector_a.size() != vector_b.size() ) {
109 std::string err_mesg = __FUNCTION__ ;
110 err_mesg += "\nJVectors are not the same size";
111 err_mesg += boost::lexical_cast<std::string> (vector_a.size());
113 err_mesg += boost::lexical_cast<std::string> (vector_b.size());
114 throw std::length_error(err_mesg);
117 auto vector_c = vector_a;
119 std::transform(vector_c.underlying_vector.begin(),\
120 vector_c.underlying_vector.end(),\
121 vector_b.underlying_vector.begin(),\
122 vector_c.underlying_vector.begin(),\
128 friend JVector<F> operator- (JVector<F>& vector_a, std::vector<F>& vector_b) {
130 if( vector_a.size() != vector_b.size() ) {
131 std::string err_mesg = "JVectors and vector are not the same size ";
132 err_mesg += boost::lexical_cast<std::string> (vector_a.size());
134 err_mesg += boost::lexical_cast<std::string> (vector_b.size());
135 throw std::length_error(err_mesg);
138 auto vector_c = vector_a;
140 std::transform(vector_c.underlying_vector.begin(),\
141 vector_c.underlying_vector.end(),\
143 vector_c.underlying_vector.begin(),\
149 friend JVector<F> operator* (JVector<F>& vector_a, JVector<F>& vector_b) {
151 if( vector_a.size() != vector_b.size() ) {
152 std::string err_mesg = __FUNCTION__ ;
153 err_mesg += "\nJVectors are not the same size";
154 err_mesg += boost::lexical_cast<std::string> (vector_a.size());
156 err_mesg += boost::lexical_cast<std::string> (vector_b.size());
157 throw std::length_error(err_mesg);
160 auto vector_c = vector_a;
162 for(unsigned int i=0; i<vector_a.size(); i++) {
163 vector_c.underlying_vector[i] =\
164 vector_a.underlying_vector[i] *\
165 vector_b.underlying_vector[i];
171 friend JVector<F> operator* (JVector<F>& vector_a, std::vector<F>& vector_b) {
173 if( vector_a.size() != vector_b.size() ) {
174 std::string err_mesg = "JVectors and vector are not the same size ";
175 err_mesg += boost::lexical_cast<std::string> (vector_a.size());
177 err_mesg += boost::lexical_cast<std::string> (vector_b.size());
178 throw std::length_error(err_mesg);
181 auto vector_c = vector_a;
183 for(unsigned int i=0; i<vector_a.size(); i++) {
184 vector_c.underlying_vector[i] =\
185 vector_a.underlying_vector[i] *\
192 //Re-implementation of std::vector methods
194 void push_back( F element ) {
195 underlying_vector.push_back( element );
198 void push_front( F element ) {
199 underlying_vector.insert( underlying_vector.begin(), element);
202 typename std::vector<F>::iterator begin() {
203 return underlying_vector.begin();
206 typename std::vector<F>::iterator end() {
207 return underlying_vector.end();
211 return underlying_vector.data();
214 F& operator[] ( const uint index ) {
215 return underlying_vector[index];
218 F& at( const uint index ) {
219 return underlying_vector.at( index );
222 void reserve ( uint n ) {
223 underlying_vector.reserve( n );