我需要一个函数以我希望看到的格式打印出矢量元素。截至目前,我有vector<double>
和vector<std::complex>
的单独功能,如下所示:
void printvd(boost::ublas::vector<double> V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
void printvc(boost::ublas::vector<std::complex> V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
我尝试过用,
template<typename T>
void printv(boost::ublas::vector<T > V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
但是任何调用(如printv<double>(V);
)总是以未定义的引用错误结束。
我也面临着与矩阵类似的问题 - 任何帮助都会受到赞赏。如果有人可以讨论如何在boost中使用矩阵表达式,也会很好。
答案 0 :(得分:0)
请确保您可以编译这个非常基本的示例,其中应解决所有路径和包含。
#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <complex>
using std::cout;
using std::endl;
void printvd(boost::numeric::ublas::vector<double> V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
void printvc(boost::numeric::ublas::vector<std::complex<double>> V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
template<typename T>
void printv(boost::numeric::ublas::vector<T > V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
int main(int argc, char *argv[])
{
boost::numeric::ublas::vector<double> testVector1;
boost::numeric::ublas::vector<std::complex<double>> testVector2;
printv(testVector1);
printv(testVector2);
return 0;
}
相应的CMakeLists.txt:
project(boost_vector_test)
cmake_minimum_required(VERSION 2.8)
add_executable(${PROJECT_NAME} main.cpp)
否则,boost有很好的文档,其中包含如何使用矩阵表达式的示例:http://www.boost.org/doc/libs/1_63_0/libs/numeric/ublas/doc/matrix_expression.html