C++ 无法写入zip范围?
以下是失败的:C++ 无法写入zip范围?,c++,c++14,range-v3,C++,C++14,Range V3,以下是失败的: #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::v
#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
#包括
#包括
#包括
// ...
std::vectorconst数据{
{1,“a”},
{2,“b”},
{3,“c”}
};
std::vector vi(data.size());
std::vector vs(data.size());
使用名称空间范围;
复制(数据,视图::zip(vi,vs));//错误
叮当声说
No matching function for call to object of type 'const
ranges::v3::with_braced_init_args<ranges::v3::copy_fn>'
对“const”类型对象的调用没有匹配函数
范围::v3::带括号的参数
假设这是设计的,为什么
那么,我怎样才能对范围做这个显而易见的事情呢
copy
采用输出迭代器,而不是输出范围。因此,您需要在zip视图上调用begin
,并将其转换为迭代器zip
ping两个范围生成一个对
(好吧,一个公共对
),但是,虽然两个元素的元组可以从对中分配,但不能从两个元素的元组中分配对。因此,我们无法执行与*zip_iterator=*data.begin()
等效的操作,并且概念检查失败。如果将数据
设为对
s的向量,则它将起作用这是不相关的(有人引用,然后删除了评论)。后退插入器这里是范围::后退插入器。事实上,问题并不是这样。我更新了相关代码以消除歧义。背面插入的压缩范围错误与此相同。当然,使用它们会更方便。我不认为它与
zip
有关。所有视图都必须输入范围。我明白了。。那就行动吧?但没有看到它如何与拉链组合。好。。困惑现在。(2)可以说是一个错误。类似元组的东西应该是可以相互分配的。好吧,是的,我正要指出这一点,这个Eric的家伙插嘴了:)谢谢,我真傻,竟然使用了一个预期输出iter的范围。然而,平心而论,编译器错误并没有那么有用。具有讽刺意味的是,基于概念的故事大纲似乎没有以前的错误小说所具有的令人满意的妙语:(sfinae是所有这些的正确工具吗?同时也不清楚我如何能回到一个压缩范围内插入。)嗯,让我为这编出另一个问题,在这里问back_inserter问题: