在C++中,是否可以轻松地将一个字符串转换为向量?
string s = "12345"
vector<int>(s.begin(), s.end(), c => c - '0'); // something like that
目标是拥有一个整数向量,例如{1, 2, 3, 4, 5}
;
我不想使用循环,我希望编写清晰简单的代码。(我知道在底层仍然会有一些循环)。
该字符串始终为数字。
在C++中,是否可以轻松地将一个字符串转换为向量?
string s = "12345"
vector<int>(s.begin(), s.end(), c => c - '0'); // something like that
目标是拥有一个整数向量,例如{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';});
transform(s.begin(), s.end(), std::back_inserter(v), [](char a){return a - '0'; });
- ixScistring s = "12345";
vector<int> v;
for_each(s.begin(), s.end(), [&v](char c) {v.push_back(c - '0');});
如果你的字符串太长了,导致双重迭代带来的性能影响很大,那么你也可以只进行单次迭代:
vector<int> v;
v.reserve(str.size());
transform(begin(str), end(str), back_inserter(v),
[](const auto &c){return c - '0';});
使用 std::transform
的一个循环:
std::vector<int> v(s.size());
std::transform(s.begin(), s.end(), v.begin(), [](char c){return c - '0';});
string s = "1234";
vector<int> v;
for(auto& i : s) v.push_back(i - '0');
只有两行代码:
vector<int> v(s.begin(), s.end());
for(auto& i : v) i = i - '0';
这是最简单的一个!