我有一个 std::vector,我想把它转换成 arma::rowvec
我弄完了:
vector<int> x = foo();
rowvec a;
vector<int>::const_iterator iter2;
int j = 0;
for(iter2 = x.begin(); iter2 != x.end(); ++iter2) {
a(j++,0) = *iter2;
}
a.print("a");
但我得到:
error: Mat::operator(): out of bounds
terminate called after throwing an instance of 'std::logic_error'
what():
如果我在最后的 rowvec 中使用
a(j++,0) = *iter2;
而不是 a << *iter2;
,我只会得到最后一个元素。 最佳答案
您忘记设置行 vector 的大小。
更正确的代码是:
vector<int> x = foo();
rowvec a(x.size());
... rest of your code ...
也可以通过 conv_to 函数将 std::vector 转换为 Armadillo 矩阵或 vector 。因此,您可以这样做,而不是手动循环:
vector<int> x = foo();
rowvec a = conv_to<rowvec>::from(x);
请注意,rowvec 是 Row 的同义词。请参阅 Row 类的文档。因此,在两个代码示例中,也发生了 int 到 double 的转换。如果您不希望那样,您可能希望改用 irowvec。
关于c++ - arma::rowvec 来自 std::vector<int>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9276881/