向量从一种类型到另一种类型的隐式转换

Ahm*_*nas 3 c++ visual-c++ c++11

嘿伙计们希望你能帮助我.

我想知道是否可以隐式地将一种类型的矢量转换为另一种类型的矢量

即一些使这个代码工作的方法(显然这是我想要做的简化问题)

std::vector<int> intVec;
intVec.push_back(1);

std::vector<double> doubleVec = intVec;
std::vector<double> doubleVec2;
doubleVec2 = intVec;
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 12

不,不同的矢量类型之间没有转换(隐式或其他).

您可以从迭代器范围初始化它:

std::vector<double> doubleVec(intVec.begin(), intVec.end());
Run Code Online (Sandbox Code Playgroud)

也许将它包装在一个函数中:

template <typename To, typename From>
To container_cast(From && from) {
    using std::begin; using std::end; // Koenig lookup enabled
    return To(begin(from), end(from));
}

auto doubleVec = container_cast<std::vector<double>>(intVec);
Run Code Online (Sandbox Code Playgroud)

  • @death_relic0 如果`myClass` 可以从`pair&lt;int, int&gt;` 构建,这将起作用。如果不是,那么......好吧,我不知道你会期望什么工作。 (2认同)
  • 我Koenig你的迭代器,只是因为.要考虑的一件事是,如果`from`是一个右值,我们是否应该有条件地使用移动迭代器从每个元素中删除内容,如果移动是noexcept的话? (2认同)