Ответ 1
Вот простой пример реализации:
#include <string>
#include <vector>
#include <sstream>
#include <utility>
std::vector<std::string> explode(std::string const & s, char delim)
{
std::vector<std::string> result;
std::istringstream iss(s);
for (std::string token; std::getline(iss, token, delim); )
{
result.push_back(std::move(token));
}
return result;
}
Использование:
auto v = explode("hello world foo bar", ' ');
Примечание: идея @Jerry о записи на выходной итератор более идиоматична для С++. Фактически, вы можете предоставить оба; шаблон выход-итератор и обертка, которая создает вектор, для максимальной гибкости.
Примечание 2: Если вы хотите пропустить пустые токены, добавьте if (!token.empty())
.