Есть ли способ преобразовать вектор Armadillo в строку на C++?

Мне было интересно, есть ли способ преобразовать вектор Armadillo в строку std. Например, если у меня есть этот вектор:

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

Как я могу производить:

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

от него?

2 ответа

Решение

Используйте комбинацию 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);

Это должно работать:

std::ostringstream s;
s << myvec;
std::string mystring = s.str();
Другие вопросы по тегам