我有一个 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/

10-11 22:56