首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是最好的方法来转换成一个双倍向量的双倍?

什么是最好的方法来转换成一个双倍向量的双倍?
EN

Stack Overflow用户
提问于 2013-11-13 08:38:04
回答 3查看 161关注 0票数 2

如果我有字符串"2.5 4.2 6.9 1.1",我如何才能尽可能有效地将其转换为双精度向量?

EN

回答 3

Stack Overflow用户

发布于 2013-11-13 08:46:07

代码语言:javascript
复制
vector<double> convert_string_to_vec(std::string const & str)
{
    std::istringstream input{str};
    vector<double> output{std::istream_iterator<double>{input},
                          std::istream_iterator<double>{}};

    return output;
}

您需要包含<sstream><iterator>才能正常工作。这是一个working example.

票数 4
EN

Stack Overflow用户

发布于 2013-11-13 08:45:53

这就是我通常会做的。可能不是最有效的方法,但非常简单。

代码语言:javascript
复制
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

int main()
{
    std::string d("2.5 4.2 6.9 1.1");
    std::stringstream s(d);
    std::vector<double> result;
    double temp;
    while(s >> temp)
    {
        result.push_back(temp);
    }
    for(size_t i = 0; i < result.size(); ++i)
    {
        std::cout << result[i] << "\n";
    }

    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-13 09:43:05

这里有一种独特的方式:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <string>
#include <sstream>

template <class Facet>
struct erasable_facet : Facet
{
    erasable_facet() : Facet(0) { }
    ~erasable_facet() { }
};

std::vector<double> convert(const std::string& str)
{
    using num_get = std::num_get<char>;

    erasable_facet<num_get> facet;

    std::stringbuf buf(str);
    std::vector<double> v;

    std::ios ios(nullptr);
    std::ios_base::iostate err = std::ios_base::goodbit;

    double d;
    std::istreambuf_iterator<char> it, end;

    do
    {
        it = facet.get(&buf, end, ios, err, d);
        buf.sbumpc(); // skip space

        if (!(err & std::ios_base::failbit) &&
            !(err & std::ios_base::badbit))
            v.push_back(d);
        else
            return v;
    } while (it != end);

    return v;
}

int main()
{
    std::string str = "1.24 5.32 9.53";

    auto v = convert(str);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19942989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档