Как преобразовать вектор <интервал> в строку? [дубликат]

19
задан fbrereto 25 March 2010 в 20:28
поделиться

4 ответа

А как насчет:

std::stringstream result;
std::copy(my_vector.begin(), my_vector.end(), std::ostream_iterator<int>(result, " "));

Затем вы можете передать указатель из result.str (). C_str ()

51
ответ дан 30 November 2019 в 02:11
поделиться

Вы можете использовать copy в сочетании с объектом stringstream и адаптером ostream_iterator :

#include <iostream>

#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v;
    v.push_back(12);
    v.push_back(32);
    v.push_back(42);
    v.push_back(84);

    stringstream ss;
    copy( v.begin(), v.end(), ostream_iterator<int>(ss, " "));
    string s = ss.str();
    s = s.substr(0, s.length()-1);  // get rid of the trailing space

cout << "'" << s << "'";

    return 0;
}

Вывод:

'12 32 42 84 '

5
ответ дан 30 November 2019 в 02:11
поделиться

Я бы использовал поток строк для построения строки. Примерно так:

std::vector<int>::const_iterator it;
std::stringstream s;
for( it = vec.begin(); it != vec.end(); ++it )
{
    if( it != vec.begin() )
        s << " ";

    s << *it;
}

// Now use s.str().c_str() to get the null-terminated char pointer.
4
ответ дан 30 November 2019 в 02:11
поделиться

Вы все правильно поняли, но вы можете использовать std :: ostringstream для создания массива символов.

#include <sstream>

std::ostringstream StringRepresentation;
for ( vector<int>::iterator it = MyVector.begin(); it != MyVector.end(); it++ ) {
    StringRepresentation << *it << " ";
}

const char * CharArray = StringRepresentation.str().c_str();

В этом случае CharArray предназначен только для чтения. Если вы хотите изменить значения, вам придется их скопировать. Вы можете упростить это, используя Boost.Foreach .

2
ответ дан 30 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: