【问题标题】:Converting a string to vector in C++在 C++ 中将字符串转换为向量
【发布时间】:2015-05-17 15:53:28
【问题描述】:

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

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

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

我不想使用循环,我想写一个清晰简单的代码。 (我知道无论如何下面都会有一些循环)。

字符串总是一个数字。

【问题讨论】:

标签: c++ string vector


【解决方案1】:

你可以开始

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

然后使用&lt;algorithm&gt;transform:

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

【讨论】:

  • oneliner:transform(s.begin(), s.end(), std::back_inserter(v), [](char a){return a - '0'; });
  • 我同意。不管你信不信,我开始写这个作为替代,并以不太清楚为由将其删除(当然,这是非常私人的事情)。也许你指出来是件好事。
  • 顺便说一句,您不需要static_cast,因为按照标准,算术运算会将所有操作数至少转换为int
  • 谢谢!我不知道。相应地进行了编辑。
【解决方案2】:

也许不完全是你想要的(我不知道如何在构造函数中实现它):

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。)

    【讨论】:

      【解决方案4】:

      std::transform 的一个循环:

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

      【讨论】:

        【解决方案5】:
        string s = "1234";
        vector<int> v;
        for(auto& i : s) v.push_back(i - '0');
        

        一个班轮!

        【讨论】:

          【解决方案6】:

          只有我的两行:

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

          这是最简单的一个!

          【讨论】:

            猜你喜欢
            • 2020-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-31
            • 1970-01-01
            • 2013-10-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多