Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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++ back_inserter如何确定容器的类型_C++_Iterator_C++17 - Fatal编程技术网

C++ back_inserter如何确定容器的类型

C++ back_inserter如何确定容器的类型,c++,iterator,c++17,C++,Iterator,C++17,我不明白back\u inserter如何知道要返回的容器类型 我的“调查”始于。在这里,您将看到定义为的std::back\u inserter template <class Container> back_insert_iterator<Container> back_inserter (Container& x); 这条线不是应该是吗 std::copy (bar.begin(),bar.end(),back_inserter<std::vec

我不明白
back\u inserter
如何知道要返回的容器类型

我的“调查”始于。在这里,您将看到定义为的
std::back\u inserter

template <class Container>
  back_insert_iterator<Container> back_inserter (Container& x);
这条线不是应该是吗

std::copy (bar.begin(),bar.end(),back_inserter<std::vector<int>>(foo));
复制(bar.begin(),bar.end(),back_inserter(foo));
显然,它不应该因为代码运行。那么
back\u inserter
如何知道用于“back insert”的容器类型呢。“我是什么?”/P> > P>这个特征称为类型演绎,这是现代C++的基础,根据本书:

将有助于考虑<代码>模板BuffEnter Tyror ButoSubter(T&X);代码>?你有一个模板。当您声明一个类型为
T
(例如
std::vector
in
std::vector foo,bar;
)的类时,模板推断可以从类实例中确定正确的类型,例如..
foo
bar
。David说的。这是我的建议。可能是有点枯燥和正式的阅读,但示例应该帮助您了解发生了什么。
std::copy
也是一个模板函数,您也不必为此指定类型
std::copy (bar.begin(),bar.end(),back_inserter(foo));
std::copy (bar.begin(),bar.end(),back_inserter<std::vector<int>>(foo));