是否有单表达式方法为变量矩阵或向量的所有元素分配标量?我正试图找到一种更紧凑的表达方式:
boost::numeric::ublas::c_vector<float, N> v;
for (size_t i=0; i<N; i++) {
v[i] = myScalar;
}
以下不起作用:
boost::numeric::ublas::c_vector<float, N>
v(myScalar, myScalar, ...and so on..., myScalar);
boost::numeric::ublas::c_vector<float, N> v;
v = myScalar;
答案 0 :(得分:7)
因为矢量模型是标准的随机访问容器,所以您应该能够使用标准的STL算法。类似的东西:
c_vector<float,N> vec;
std::fill_n(vec.begin(),N,0.0f);
或
std::fill(vec.begin(),vec.end(),0.0f);
它可能也与Boost.Assign兼容,但您必须检查。
答案 1 :(得分:6)
我已经开始使用boost::assign
来处理我想要静态分配特定值的情况(从上面的链接中提取的示例)。
#include <boost/assign/std/vector.hpp>
using namespace boost::assign; // bring 'operator+()' into scope
{
vector<int> values;
values += 1,2,3,4,5,6,7,8,9;
}
您还可以将boost::assign
用于地图。
#include <boost/assign/list_inserter.hpp>
#include <string>
using boost::assign;
std::map<std::string, int> months;
insert( months )
( "january", 31 )( "february", 28 )
( "march", 31 )( "april", 30 )
( "may", 31 )( "june", 30 )
( "july", 31 )( "august", 31 )
( "september", 30 )( "october", 31 )
( "november", 30 )( "december", 31 );
您可以允许使用list_of()
和map_list_of()
#include <boost/assign/list_of.hpp> // for 'list_of()'
#include <list>
#include <stack>
#include <string>
#include <map>
using namespace std;
using namespace boost::assign; // bring 'list_of()' into scope
{
const list<int> primes = list_of(2)(3)(5)(7)(11);
const stack<string> names = list_of( "Mr. Foo" )( "Mr. Bar")
( "Mrs. FooBar" ).to_adapter();
map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);
// or we can use 'list_of()' by specifying what type
// the list consists of
next = list_of< pair<int,int> >(6,7)(7,8)(8,9);
}
还有repeat()
,repeat_fun()
和range()
的功能,可让您添加重复值或值范围。
答案 2 :(得分:5)
推荐的方式如下:
boost::numeric::ublas::c_vector<float, N> v;
v = boost::numeric::ublas::zero_vector<float>(N);
v = boost::numeric::ublas::scalar_vector<float>(N, value);
矩阵类型也是如此:
boost::numeric::ublas::matrix<float> m(4,4);
m = boost::numeric::ublas::identity_matrix<float>(4,4);
m = boost::numeric::ublas::scalar_matrix<float>(4,4);
m = boost::numeric::ublas::zero_matrix<float>(4,4);
答案 3 :(得分:1)
你试过这个吗?
ublas :: c_vector v = ublas :: scalar_vector(N,myScalar);
答案 4 :(得分:0)
自从我使用C ++以来已经有一段时间了。以下是否有效?
for (size_t i = 0; i < N; v[i++] = myScalar) ;