是否有从容器转换的标准方法<Type1>到容器<Type2>?

Is there a standard way to convert from containerlt;Type1gt; to containerlt;Type2gt;?(是否有从容器转换的标准方法lt;Type1gt;到容器lt;Type2gt;?)
本文介绍了是否有从容器转换的标准方法<Type1>到容器<Type2>?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个类AB,并且存在一个隐式转换运算符从一个到另一个,所以:

I have two classes A and B, and an implicit conversion operator exists to go from one to the other, so that:

A a;
B b;
b = a; // Works

是否有将 std::list<A> 转换为 std::list<B> 的标准方法?(甚至从 std::vector<A>std::list<B>).

Is there a standard way to convert a std::list<A> to a std::list<B> ? (Or even from std::vector<A> to a std::list<B>).

我知道我可以遍历列表并逐项构建第二个列表,但我想知道是否有更优雅的解决方案.

I know I can iterate trough to the list and build the second list item by item, but I wonder if there is a more elegant solution.

不幸的是,我不能使用 boost,但出于好奇,如果 boost 可以处理这个问题,我也很乐意知道如何处理.

Unfortunately I cannot use boost but out of curiosity as a bonus question, if boost can handle this, I'd be happy to know how too.

推荐答案

嗯,是的.每个序列容器类型都有一个模板构造函数,它接受一对迭代器(一个迭代器范围)作为输入.它可以用于从另一个序列构造一个序列,而不管序列类型如何,只要序列元素类型可以相互转换.比如说

Well, yes. Each sequence container type has a template constructor that takes a pair of iterators (an iterator range) as an input. It can be used to construct one sequence from another, regardless of the sequence types, as long as the sequence element types are convertible to each other. Like for example

std::vector<A> v;
...
std::list<B> l(v.begin(), v.end());

序列容器也有 assign 成员函数,它对赋值语义(与初始化语义相反)做同样的事情.

Also sequence containers have assign member function which does the same thing with assignment semantics (as opposed to initialization semantics).

std::vector<A> v;
std::list<B> l;
...
l.assign(v.begin(), v.end()); // replaces the contents of `l`

这篇关于是否有从容器转换的标准方法&lt;Type1&gt;到容器&lt;Type2&gt;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

What is the proper function for comparing two C-style strings?(比较两个 C 风格字符串的正确函数是什么?)
Image Capture with OpenCV - Select Timeout Error(使用 OpenCV 捕获图像 - 选择超时错误)
SHA256 HMAC using OpenSSL 1.1 not compiling(使用 OpenSSL 1.1 的 SHA256 HMAC 未编译)
How to make a Debian package depend on multiple versions of libboost(如何制作一个Debian包依赖于多个版本的libboost)
Why does strcpy_s not exist anywhere on my system?(为什么我系统上的任何地方都不存在 strcpy_s?)
Simplest way to get current time in current timezone using boost::date_time?(使用 boost::date_time 在当前时区获取当前时间的最简单方法?)