Я покажу часть функции, где вектор уже построен.Итак, функция, которую я покажу, упрощена, но демонстрирует, как вы можете построить и вернуть строку результата.
#include <iostream>
#include <string>
#include <vector>
static std::string test( const std::vector<std::string> &results )
{
const std::string pad( " " );
std::string::size_type n = 0;
for ( const std::string &s : results ) n += s.length();
n += results.size() * ( pad.size() + sizeof( '\n' ) );
std::string txt;
txt.reserve( n );
for ( const std::string &s : results ) txt += pad + s + '\n';
return txt;
}
int main()
{
std::vector<std::string> results = { "This is a sentence.", "This is a sentence." };
std::cout << test( results );
}
Вывод программы:
This is a sentence.
This is a sentence.
Чтобы сделать код более эффективным, выдолжно зарезервировать достаточно места для строки txt
.Цикл
for ( const std::string &s : results ) n += s.length();
вычисляет общий размер всех строк, хранящихся в векторе.
Примечание: Вы можете использовать стандартный алгоритм std::accumulate
, объявленный в заголовке<numeric>
вместо цикла, как, например,
std::string::size_type n = std::accumulate( std::begin( results ), std::end( results ),
std::string::size_type( 0 ),
[]( const std::string::size_type acc, const std::string &s )
{
return acc + s.size();
} );
Затем вы добавляете длину пробелов для каждой строки и длину символа '\n'
.
Таким образом, все готовопостроить строку результата, которая возвращается из функции.
std::string txt;
txt.reserve( n );
for ( const std::string &s : results ) txt += pad + s + '\n';
return txt;