【问题标题】:How do I convert a double to int in vector c++?如何在向量 C++ 中将 double 转换为 int?
【发布时间】:2015-09-11 11:51:39
【问题描述】:

我知道第一个数组的演员表。

std::vector<int> v_int;
std::vector<float> v_float(v_int.begin(), v_int.end());

但是如何转换第二个数组?

vector<int> aCol(4);
vector<vector<int>> a(2, aCol);
vector<vector<double>> b(a.begin(), a.end());// ???

在这种情况下我该怎么办?

【问题讨论】:

  • std::vector&lt;float&gt;的内容复制到std::vector&lt;int&gt;?
  • 你想要std::vector&lt;int&gt; v_int(v_float.begin(), v_float.end());?你遇到了什么问题?
  • 向量 aCol(4);向量 > a(2, aCol);矢量> b(a.begin(),a.end()); ????????????????
  • @윤희동,我仍然不知道你在问什么。你想“转换”什么?
  • stackoverflow.com/questions/6399090/… 我想这只是这个问题的重复。

标签: c++ casting


【解决方案1】:

你的vector-of-vectors构造没有编译的原因是因为

vector<vector<double>> b(a.begin(), a.end())

是使用元素类型为vector&lt;int&gt; 的迭代器构造b 的范围。这将尝试用std::vector&lt;int&gt;s 构造b 的内部std::vector&lt;double&gt;s,它不应该编译也就不足为奇了。

将此与您的第一个示例进行比较,

std::vector<float> v_float(v_int.begin(), v_int.end());

是从元素类型为int 的迭代器构造v_float 的范围。这是可行的,因为允许从 int 转换为 float,但不允许从 std::vector&lt;int&gt; 转换为 std::vector&lt;double&gt;(或 std::vector&lt;float&gt;)。

您可能希望查看循环遍历a 的每个元素并推回由abegin()end() 构造的向量

【讨论】:

    【解决方案2】:
    vector<vector<double>> b;
    b.reserve(a.size());
    for (const auto& elem : a) {
      b.emplace_back(elem.begin(), elem.end());
    }
    

    【讨论】:

      【解决方案3】:

      对于编译器vector&lt;int&gt;vector&lt;double&gt; 是完全不相关的类型,不能隐式转换为另一种。你可以做的是:

      for(auto&& elem: a)
          b.push_back(std::vector<double>(elem.begin(), elem.end()));
      

      【讨论】:

        猜你喜欢
        • 2011-09-17
        • 1970-01-01
        • 2012-06-01
        • 2021-08-14
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        相关资源
        最近更新 更多