c++ - 如何将一串整数转换为一个充满整数的 vector ?

标签 c++ vector

我知道有人问过关于同一件事的其他问题,但是,我已经使用这些其他资源来得出我现在所拥有的,但我遇到了一个我似乎无法弄清楚的错误。另外,请记住,我是一名 C++ 初学者。话虽如此,我有一个非常大的字符串,其中填充了格式如下的整数: newString = "12 -34 50 2 -102 13 78 9"(实际字符串要大得多)。然后,我尝试使用 transform() 创建一个函数,将字符串转换为 int vector :

int convertString(){

    istringstream is(newString);
    vector<int> intVector;
    transform(istream_iterator<string>( is ),
              istream_iterator<string>(),
              back_inserter( intVector ),
              []( const string &newString ){ return ( stoi( newString ) ); } );//This is the line indicated in the error!
    for(int x : intVector )
        cout << x << ' '<<endl;

    return 0;
    }

我得到的错误是在指示的错误行中有一个预期的表达式... 有什么解决办法吗?

在此先感谢,如果有任何不清楚的地方,请告诉我!

最佳答案

假设您有理由确定输入仅包含格式正确的 int,(或者当/如果遇到可读整数以外的其他内容时可以停止读取),则不需要 transform 这里 -- istream_iterator 本身可以很好地处理转换。您可以直接从迭代器初始化 vector ,给出如下代码:

std::istringstream is(newString);
std::vector<int> intVector { std::istream_iterator<int>(is), 
                             std::istream_iterator<int>()};

这在一个方面与您的版本不同:如果您将字符串提供给 stoi,但它无法转换为整数,它会抛出异常--invalid_argument 如果它包含诸如 ac; 之类的东西根本无法转换为整数,或者 out_of_range 如果它包含诸如 50 位数字之类的东西,则产生的结果是不适合目标类型。

关于c++ - 如何将一串整数转换为一个充满整数的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930025/

相关文章:

c++ - std::tie 是如何工作的?

c++ - 相对于另一个 vector 对一个 vector 进行排序 - 最有效的方法?

pointers - 在 Rust 中,修改借用的指针会改变原始值吗?

c++ - std::string 不是 std::vector<char> 吗?

c++ - 如何删除一组 vector 中的 vector 元素?

c++ - 在 3D 中查找垂直于两条相交线的点

c++ - Over-the-Air/Over-the-Wire 自动软件更新(热代码加载)策略

c++ - 检测鼠标按钮是否按下

c++ - 是否可以在全局范围内构造一个临时变量?

Haskell 嵌套向量并行策略