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

标签 c++ c++11

我想将简单的整数 vector 转换为自定义类的 vector 。我的类有一个接受 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)...);

我怎样才能改变我的构造函数让它工作,或者有更简单的方法吗?

最佳答案

注意错误消息中的行号。问题不在 assign 调用中;它在 vector 的初始化上。

当创建特定大小的 std::vector 时, vector 会填充默认构造的元素。 BitInteger 不是可默认构造的,因此您不能创建包含它们的 nums.size() 的 vector 。提供默认构造函数以使代码编译。

BitInteger() {
  // ...
}

或者,您可以直接从先前的 vector 构造元素。

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

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

关于c++ - 将一种类型的 std::vector 转换为另一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48254978/

相关文章:

c++ - 多连接套接字c++

c++ - 使用带有回调的可变参数模板

c++ - 了解顶点数组对象 (glGenVertexArrays)

C++ 无法将函数传递给二叉搜索树遍历方法

c++ - C++ 中全局和类中静态常量和常量变量的行为

c++ - 如何在一行中读取具有多个定界符的文件

c++ - auto x = make_x(...) 和这个

c++ - 获取 std::stack 后面的容器

c++ - 在 C++11 标准中哪里说 char* p = "abc";是病态的?

c++ - 如何异步更新listmodel和listview