我编写了一个包含std::vector<double>
实例的自定义容器类-效果很好。为了与其他API兼容,我想将容器的内容导出为std::vector<double>
copy。目前这有效:
MyContainer container;
....
std::vector<double> vc(container.begin(), container.end());
但是如果可能的话希望能够写:
MyContainer container;
....
std::vector<double> vc(container);
我可以(轻松)创建这样的std::vector<double>
构造函数吗?
您可以将显式转换为std::vector<double>
:
explicit operator std::vector<double>() const {
return std::vector<double>(begin(), end());
}
然后,std::vector<double> vc(container);
将调用std::vector<double>
move构造函数。
注意,通常不赞成在计算上昂贵的转换。因此,向量工厂函数可能是一个更明智的方法:
class MyContainer {
public:
using value_type = double;
// ...
};
template<typename Source>
auto to_vector(Source source) {
return std::vector<typename Source::value_type>(source.begin(), source.end());
}
然后你会写:
MyContainer container;
// ...
auto vc = to_vector(container);
这也是更通用的,因为它与任何有兼容的工作value_type
,begin
和end
成员。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句