在C++中将字符串转换为向量

5

在C++中,是否可以轻松地将一个字符串转换为向量?

string s = "12345"
vector<int>(s.begin(), s.end(), c => c - '0'); // something like that

目标是拥有一个整数向量,例如{1, 2, 3, 4, 5};

我不想使用循环,我希望编写清晰简单的代码。(我知道在底层仍然会有一些循环)。

该字符串始终为数字。


有人之前在StackOverflow上已经问过这个问题了,这里是答案链接:https://dev59.com/eWsy5IYBdhLWcg3w5CBr - Ron Kuper
他正在将其转换为字符向量,而不是整数。 - Patryk Golebiowski
6个回答

7
您可以从以下步骤开始:

string s = "12345"
vector<int> v(s.begin(), s.end())

然后使用<algorithm>transform函数:

transform(
    s.begin(), s.end(), 
    s.begin(), 
    [](char a){return a - '0';});

2
一行代码:transform(s.begin(), s.end(), std::back_inserter(v), [](char a){return a - '0'; }); - ixSci
我同意。信不信由你,我开始写这个作为一个替代方案,但因为它不够清晰而删除了它(当然,这是一个非常个人的问题)。也许你指出了这一点是好的。 - Ami Tavory
谢谢!我不知道那个。已经做了相应的编辑。 - Ami Tavory

4
也许不完全符合您的要求(我不知道如何在构造函数中实现):
string s = "12345";
vector<int> v;
for_each(s.begin(), s.end(), [&v](char c) {v.push_back(c - '0');});

3

如果你的字符串太长了,导致双重迭代带来的性能影响很大,那么你也可以只进行单次迭代:

vector<int> v;
v.reserve(str.size());
transform(begin(str), end(str), back_inserter(v),
    [](const auto &c){return c - '0';});

(或者使用其他人已经展示的C++11 Lambda表达式。)

1

使用 std::transform 的一个循环:

std::vector<int> v(s.size());
std::transform(s.begin(), s.end(), v.begin(), [](char c){return c - '0';});

1
string s = "1234";
vector<int> v;
for(auto& i : s) v.push_back(i - '0');

一行代码!

0

只有两行代码:

vector<int> v(s.begin(), s.end());
for(auto& i : v) i = i - '0';

这是最简单的一个!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接