当前位置:  开发笔记 > 编程语言 > 正文

C++ - 为std :: vector <double>创建新的构造函数?

如何解决《C++-为std::vector<double>创建新的构造函数?》经验,为你挑选了1个好方法。

我编写了一个包含std::vector实例的自定义容器类- 效果很好.为了与其他API兼容,我想将容器的内容导出为std::vector副本.目前这有效:

MyContainer container;
....
std::vector vc(container.begin(), container.end());

但如果可能的话希望能够写:

MyContainer container;
....
std::vector vc(container);

我可以(轻松地)创建这样的std::vector构造函数吗?



1> rightfold..:

您可以创建一个显式转换std::vector:

explicit operator std::vector() const {
    return std::vector(begin(), end());
}

然后,std::vector vc(container);将调用std::vector移动构造函数.

请注意,计算成本高昂的转换通常不受欢迎.因此,矢量工厂函数可能是一种更明智的方法:

class MyContainer {
public:
    using value_type = double;
    // ...
};

template
auto to_vector(Source source) {
    return std::vector(source.begin(), source.end());
}

然后你会写:

MyContainer container;
// ...
auto vc = to_vector(container);

这也是更通用的,因为它与任何有兼容的工作value_type,beginend成员.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有