Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代器适配器,它根据lambda提供的一元op进行自身转换_C++_Iterator_Std - Fatal编程技术网

C++ 迭代器适配器,它根据lambda提供的一元op进行自身转换

C++ 迭代器适配器,它根据lambda提供的一元op进行自身转换,c++,iterator,std,C++,Iterator,Std,我知道标准库有std::transform,但问题是它实际上是一个通过一元转换器过滤的复制操作 我需要的是一个迭代器适配器,在这里我可以提供一个一元运算,每次我使用这个适配器增加迭代器时,它都会获取当前迭代中的元素并逐个转换它 我可以自己实现它,但我想知道标准是否已经有了它(我希望它有) 如果我想用std::map中的第一个元素来初始化std::unordered_集,这就是新的ranges库的用途。同时,您可以使用ranges-v3,直到您的实现赶上C++20为止。@NathanOliver真

我知道标准库有
std::transform
,但问题是它实际上是一个通过一元转换器过滤的复制操作

我需要的是一个迭代器适配器,在这里我可以提供一个一元运算,每次我使用这个适配器增加迭代器时,它都会获取当前迭代中的元素并逐个转换它

我可以自己实现它,但我想知道标准是否已经有了它(我希望它有)


如果我想用
std::map中的第一个元素来初始化
std::unordered_集
,这就是新的ranges库的用途。同时,您可以使用ranges-v3,直到您的实现赶上C++20为止。@NathanOliver真的!好酷那太棒了我从来没有真正进入过C++20,我几乎不懂C++17,但感谢你的启发:)你想从迭代器中初始化集合,而不是将其初始化为空,然后再添加元素,这有什么原因吗?@n314159如果我从函数中返回集合,我需要定义集合,那么执行
return{adapting_iter(begin(),一元数,一元数),调整iter(end(),一元数)}
像这样,我使用
std::set
的迭代器,而不是为每次插入调用
insert()
。重点是,使用迭代器构造可能比首先必须构造要快,而不是逐个初始化元素。您可以使用插入适配器使用
transform
,但是
for
循环的性能应该有很大的差异。