繁体   English   中英

可写的 zip 范围是不可能的?

[英]writable zip ranges are not possible?

以下是失败的:

#include <range/v3/view.hpp>
#include <range/v3/view/zip.hpp>
#include <range/v3/utility/iterator.hpp>

// ...

std::vector< std::tuple<int, std::string> > const data{
   {1,"a"},
   {2,"b"},
   {3,"c"}
};
std::vector<int> vi(data.size());
std::vector<std::string> vs(data.size());

using namespace ranges;
copy(data,  view::zip(vi,vs) ); // error

叮当 说

No matching function for call to object of type 'const 
ranges::v3::with_braced_init_args<ranges::v3::copy_fn>'

假设这是设计使然,为什么?

而且,我怎样才能用范围做这个显而易见的事情?

  1. copy需要一个输出迭代器,而不是一个输出范围 因此,您需要在 zip 视图上调用begin并将其转换为迭代器。
  2. 解决这个问题后,您会遇到一个单独的问题。 zip ping 两个范围产生一pair (好吧,一个common_pair ),但是虽然两个元素的元组可以从对中分配,但对不能从两个元素的元组中分配。 结果,我们不能做等效的*zip_iterator = *data.begin() ,并且概念检查失败。 如果您将data设为pair s 的向量,那么它将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM