C++ 填充增压矢量或矩阵
是否有一种单一的表达方式将标量分配给boost矩阵或向量的所有元素?我试图找到一种更简洁的表达方式:C++ 填充增压矢量或矩阵,c++,boost,expression,ublas,C++,Boost,Expression,Ublas,是否有一种单一的表达方式将标量分配给boost矩阵或向量的所有元素?我试图找到一种更简洁的表达方式: boost::numeric::ublas::c_vector<float, N> v; for (size_t i=0; i<N; i++) { v[i] = myScalar; } boost::numeric::ublas::c_vector v; 对于(sisixt i=0;i i p>我使用C++以来有一段时间。下面的工作是什么?< /P> for (si
boost::numeric::ublas::c_vector<float, N> v;
for (size_t i=0; i<N; i++) {
v[i] = myScalar;
}
boost::numeric::ublas::c_vector v;
对于(sisixt i=0;i i p>我使用C++以来有一段时间。下面的工作是什么?< /P>
for (size_t i = 0; i < N; v[i++] = myScalar) ;
for(大小i=0;i
因为向量建模了一个标准的随机访问容器,所以您应该能够使用标准的STL算法。例如:
c_vector<float,N> vec;
std::fill_n(vec.begin(),N,0.0f);
它可能也与Boost.Assign兼容,但您必须检查。我已经开始使用我想要静态分配特定值的情况(从上面链接中提取的示例)
您可以使用list\u of()
和map\u list\u of()
#包含//for'list_of()'
#包括
#包括
#包括
#包括
使用名称空间std;
使用命名空间boost::assign;//将“list_of()”引入范围
{
常量列表素数=第(2)(3)(5)(7)(11)项的列表;
const stack names=列表_of(“Foo先生”)(“Bar先生”)
(“FooBar夫人”)。致_adapter();
map next=map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);
//或者我们可以通过指定类型来使用“list_of()”
//名单包括:
下一步=列表_的(6,7)(7,8)(8,9);
}
还有用于repeat()
、repeat\u fun()
和range()
的函数,允许您添加重复值或值范围。您尝试过吗
ublas::c_vector v=ublas::scalar_vector(N,myScalar);推荐的方法如下所示:
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::c_vector v;
v=boost::numeric::ublas::zero_向量(N);
v=boost::numeric::ublas::标量向量(N,值);
矩阵类型也是如此:
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);
boost::numeric::ublas::矩阵m(4,4);
m=boost::numeric::ublas::identity_矩阵(4,4);
m=boost::numeric::ublas::标量矩阵(4,4);
m=boost::numeric::ublas::zero_矩阵(4,4);
这会起作用,尽管它是一个完整的语句,而不是一个表达式。没错,但这是一种更简洁的方式,这正是您希望在帖子中找到的。-1抱歉。您必须使用“v[i++]”--“v[++i]”将跳过v[0]的初始化并覆盖超过vector.Ack结尾的内存。抱歉!我承认我必须使用正确的一元运算符,但出于某种原因,我一直认为++I是在计算后增加I的一个。主要是因为每个人都喜欢I++和“I+=1”行为似乎更符合逻辑。在任何情况下都已修复。我想我也应该感谢你,我喜欢600次重复多于601次!你还应该标记这个“C++”。STL算法似乎确实有效。谢谢。Boost。Assign似乎对我不起作用,但我想这是因为我使用的是C_向量(常量大小的向量)而不是向量(动态大小的向量),所以push_-back不起作用。这并不能回答如何填充boost::numeric::ublas::matrix
第一个示例似乎是std::vector(对其有效),而不是boost::numeric::ublas::vector(对其不起作用)。如果我不知道,如何获取值类型?
#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;
}
#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 );
#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);
}
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);