将一种类型的std :: vector转换为另一种类型

时间:2018-01-14 22:53:31

标签: c++ c++11

我想将int的简单向量转换为我的自定义类的向量。我的类有一个接受int。

的构造函数
class BitInteger {
public:
    BitInteger(int num) {
    // code omitted
    }
};

我已尝试过以下代码,但它会返回一些深奥的错误,我该如何解决?

std::vector<int> nums {0, 1, 2, 3, 5, 6, 7, 8, 9};
std::vector<BitInteger> bitIntegers(nums.size());
bitIntegers.assign(nums.begin(), nums.end());

错误是:

no matching constructor for initialization of 'BitInteger'
            ::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);

如何更改构造函数以使其工作,或者是否有更简单的方法?

1 个答案:

答案 0 :(得分:7)

注意错误消息上的行号。问题不在assign电话中;它是关于矢量初始化的。

创建特定大小的std::vector时,向量将填充默认构造的元素。 BitInteger不是默认构造的,因此您无法制作包含nums.size()个向量的向量。提供默认构造函数以使代码编译。

BitInteger() {
  // ...
}

或者,您可以直接构造前一个向量中的元素。

std::vector<BitInteger> bitIntegers(num.begin(), num.end());

然后您可以跳过整个空的初始化步骤。 (感谢@Tas提出此建议)