c – 从其他容器构造的STL容器(例如,来自向量的列表)

c – 从其他容器构造的STL容器(例如,来自向量的列表),第1张

概述在我的代码中,有时我需要从另一个容器构造一个容器.但是这些容器对象的类型不同,所以我不能使用复制构造函数.我做的看起来像这样(C 11,我使用统一初始化和构造函数委托): std::vector<int> source {1, 3, 5, 7, 9};std::list<int> destination (source.begin (), source.end ()); 我意识到std :: l 在我的代码中,有时我需要从另一个容器构造一个容器.但是这些容器对象的类型不同,所以我不能使用复制构造函数.我做的看起来像这样(C 11,我使用统一初始化和构造函数委托):

std::vector<int> source {1,3,5,7,9};std::List<int> destination (source.begin (),source.end ());

我意识到std :: List可以有这样的构造函数,以使事情变得更漂亮:

template </* ... */>class List{public:    template <class Container> List (const Container& container)    : List (container.begin (),container.end ())    {    }    /* ... */};

不幸的是,我只能为自己的课程而不是STL课程这样做.首先,问题是STL和Boost中不存在这样的协调器吗?第二个问题,是否有一种安全的方法来实现STL容器的这种ctor,可能是通过某种方式定义转换运算符?

这个问题当然只是为了方便,对代码或程序行为没有任何关键.但它可以使代码看起来更具可读性:

std::vector<int> source {1,9};std::List<int> destination = source;
解决方法 您应该怀疑将一个容器类型的完整范围复制到另一个容器类型的代码.这是一项不常见的活动.

在C中,通常首选显式转换.通常不鼓励将一种类型转换为另一种类型的隐式转换和赋值运算符,因为它们有时会导致意外的转换.

如果您确实需要经常在容器类型之间进行转换,请尝试为转换定义显式帮助函数:

template<typename ToType,typename FromType>ToType container_cast(const FromType& source){    return ToType(source.begin(),source.end(),source.get_allocator());}

然后你的例子变成:

std::vector<int> source {1,9};auto destination = container_cast<std::List<int> >(source);
总结

以上是内存溢出为你收集整理的c – 从其他容器构造的STL容器(例如,来自向量的列表)全部内容,希望文章能够帮你解决c – 从其他容器构造的STL容器(例如,来自向量的列表)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1215408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存