2015-05-20 4 views
-3

Предположим, у меня есть vector<int>, и я хочу преобразовать его в строку, что мне делать? То, что я получил от поиска в Интернете являетсяКак преобразовать вектор <int> в строку в C++

std::ostringstream oss; 

if (!vec.empty()) 
{ 
    // Convert all but the last element to avoid a trailing "," 
std::copy(vec.begin(), vec.end()-1, 
    std::ostream_iterator<int>(oss, ",")); 

// Now add the last element with no delimiter 
oss << vec.back(); 
} 

Но я не могу понять, что это значит и как это работает. Есть ли другой простой способ понять?

+6

Что конкретно вы не понимаете, о том, как это работает? – CoryKramer

+0

Я не понимаю, что делает этот оператор 'std :: copy (vec.begin(), vec.end() - 1, std :: ostream_iterator (oss,", "));' – ronilp

+0

может кто-нибудь предложить любой другой способ сделать это? – ronilp

ответ

2

Этот код необходим, только если вы хотите добавить разделитель после каждого вставленного целого числа, но даже тогда это не должно быть так сложно. Простой цикл и использование to_string гораздо более удобным для чтения:

std::string str; 

for (int i = 0; i < vec.size(); ++i) { 
    str += std::to_string(vec[i]); 
    if (i+1 != vec.size()) { // if the next iteration isn't the last 
     str += ", "; // add a comma (optional) 
    } 
} 
+0

Предположим, что никакой запятой не было, тогда 'str + =" "' было бы изменой, не так ли? – ronilp

+0

@ronilp Тогда вам не понадобится инструкция 'if' вообще, просто' str + = to_string (vec [i]) 'part. – 0x499602D2

0

Разграничение номерам,

std::vector<int> v {0, 1, 2, 3, 4}; 
std::string s(""); 
for(auto i : v) 
    s += std::to_string(i); 

запятой разделитель

std::vector<int> v {0, 1, 2, 3, 4}; 
std::string s(""); 
for(auto i : v) 
    s += std::to_string(i) + ","; 
s.pop_back(); 
Смежные вопросы