有没有办法将犰狳矢量转换为 C++ 中的字符串?

Posted

技术标签:

【中文标题】有没有办法将犰狳矢量转换为 C++ 中的字符串?【英文标题】:Is there a way to convert Armadillo vector to a string in C++? 【发布时间】:2020-08-26 09:13:26 【问题描述】:

我想知道是否有办法将犰狳向量转换为标准字符串。例如,如果我有这个向量:

arma::vec myvec("1 2 3"); //create a vector of length 3 

我怎样才能生产:

std::string mystring("1 2 3");

来自它?

【问题讨论】:

【参考方案1】:

使用ostringstream、.raw_print()、.st()、.substr() 的组合,如下所示。

// vec is a column vector, or use rowvec to declare a row vector
arma::vec myvec("1.2 2.3 3.4");  

std::ostringstream ss;

// .st() to transpose column vector into row vector
myvec.st().raw_print(ss);  

// get string version of vector with an end-of-line character at end
std::string s1 = ss.str();

// remove the end-of-line character at end
std::string s2 = s1.substr(0, (s1.size() > 0) ? (s1.size()-1) : 0);

如果要更改格式,请查看fmtflags:

std::ostringstream ss;
ss.precision(11);
ss.setf(std::ios::fixed);

【讨论】:

【参考方案2】:

这应该可行:

std::ostringstream s;
s << myvec;
std::string mystring = s.str();

【讨论】:

太棒了,谢谢!你知道为什么当我打印它时,它显示为列向量而不是一行中的字符吗?我怎样才能让它成为后一种形式? 澄清一下,如果我这样做 for(int i=0;i 糟糕。那'它显示为列向量,因为vec 是列向量。我猜你总是可以转置它。

以上是关于有没有办法将犰狳矢量转换为 C++ 中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

将犰狳中的矩阵从稀疏转换为密集(spmat 到 mat)

犰狳中的稀疏 svd (C++)

如何将犰狳矩阵转换为立方体?

在犰狳矩阵中具有概率的矢量化 Rcpp rbinom

使用 Rcpp 通过引用传递犰狳稀疏矩阵

犰狳矢量类上的 RcppArmadillo 样本