Преобразование строки в вектор в С++

Вопрос:Можно ли легко преобразовать строку в вектор в С++? string s = "12345" vector(s.begin(), s.end(), c => c - '0'); // something like that Цель состоит в том, чтобы иметь вектор ints как { 1, 2, 3, 4, 5 }; Я не хочу использовать циклы, я хочу написать четкий и простой код. (Я знаю, что

Вопрос:

Можно ли легко преобразовать строку в вектор в С++?

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’);

Один вкладыш!

Оцените статью
Добавить комментарий