Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 填充增压矢量或矩阵_C++_Boost_Expression_Ublas - Fatal编程技术网

C++ 填充增压矢量或矩阵

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矩阵或向量的所有元素?我试图找到一种更简洁的表达方式:

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);