Я читал Ускоренный C++, и я должен сказать, что это - интересная книга.
В главе 6 я должен использовать функцию из <алгоритма> для конкатенации от вектора <строка> в единственную строку. Я мог использовать, накапливаются, но это не помогает, потому что строковые контейнеры могут только push_back символы.
int main () {
using namespace std;
string str = "Hello, world!";
vector vec (10, str);
// Concatenate here?
return 0;
}
Как я присоединяюсь к строкам вместе?
Если предположить, что это вопрос 6.8, то он не говорит о том, что нужно использовать аккумулирование - он говорит об использовании "библиотечного алгоритма". Однако, вы можете использовать аккумулирование:
#include <numeric>
int main () {
std::string str = "Hello World!";
std::vector<std::string> vec(10,str);
std::string a = std::accumulate(vec.begin(), vec.end(), std::string(""));
std::cout << a << std::endl;
}
Все, что делает аккумулирование, это устанавливает 'сумму' для третьего параметра, а затем для всех значений 'val' от первого параметра до второго параметра, делает:
sum = sum + val
он возвращает 'сумму'. Несмотря на то, что в
объявлено аккумулирование, оно будет работать для всего, что реализует operator+()
Как насчет std::copy?
std::ostringstream os;
std::copy( vec_strings.begin(), vec_string.end(), ostream_iterator<string>( os ) );
cout << os.str() << endl;
Я не уверен насчет твоего вопроса. В чем проблема? Это просто вопрос петли.
#include<vector>
#include<string>
#include<iostream>
int main ()
{
std::string str = "Hello World!";
std::vector<string> vec (10,str);
for(size_t i=0;i!=vec.size();++i)
str=str+vec[i];
std::cout<<str;
}
EDIT :
Use for_each()
from <алгоритм>
Попробуйте следующее:
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string i;
void func(string &k)
{
i+=k;
}
int main () {
string str = "Hello World!";
vector<string> vec (10,str);
for_each(vec.begin(),vec.end(),func);
cout<<i;
return 0;
}