Вопрос:
Можно ли легко преобразовать строку в вектор в С++?
string s = «12345» vector<int>(s.begin(), s.end(), c => c — ‘0’); // something like that
Цель состоит в том, чтобы иметь вектор ints как { 1, 2, 3, 4, 5 };
Я не хочу использовать циклы, я хочу написать четкий и простой код. (Я знаю, что под ним будет какой-то цикл).
Строка всегда является числом.
Лучший ответ:
Вы можете начать с
string s = «12345» vector<int> v(s.begin(), s.end())
а затем используйте <algorithm> transform:
transform( s.begin(), s.end(), s.begin(), [](char a){return a — ‘0’;}); Ответ №1
Возможно, не совсем то, что вы хотите (я не знаю, как это сделать в конструкторе):
string s = «12345»; vector<int> v; for_each(s.begin(), s.end(), [&v](char c) {v.push_back(c — ‘0’);}); Ответ №2
Если ваша строка становится настолько длинной, что производительность попадает в двойную итерацию, вы также можете сделать это за один проход:
vector<int> v; v.reserve(str.size()); transform(begin(str), end(str), back_inserter(v), [](const auto &c){return c — ‘0’;});
(или с lambda С++ 11, как уже показано другими.)
Ответ №3
Только две линии:
vector<int> v(s.begin(), s.end()); for(auto& i : v) i = i — ‘0’;
Это самый простой!
Ответ №4
Один цикл с std::transform:
std::vector<int> v(s.size()); std::transform(s.begin(), s.end(), v.begin(), [](char c){return c — ‘0’;}); Ответ №5string s = «1234»; vector<int> v; for(auto& i : s) v.push_back(i — ‘0’);
Один вкладыш!