为什么在C ++ 11或C ++ 14中没有安装迭代器?

C ++ 98有front_inserterback_inserterinserter ,但是在C ++ 11或者C ++ 14中似乎没有这些版本的版本。 有没有技术原因,我们不能有front_emplacerback_emplaceremplacer

有没有技术原因,我们不能有front_emplacer,back_emplacer和emplacer?

不,没有技术上的原因。 作为certificate,这里是back_emplacer的完整实现, back_emplacer包含您的用例1的演示…

 #include <iterator> #include <vector> #include <iostream> template<class Container> class back_emplace_iterator : public std::iterator< std::output_iterator_tag, void, void, void, void > { protected: Container* container; public: typedef Container container_type; explicit back_emplace_iterator(Container& x) : container(&x) {} template<class T> back_emplace_iterator<Container>& operator=(T&& t) { container->emplace_back(std::forward<T>(t)); return *this; } back_emplace_iterator& operator*() { return *this; } back_emplace_iterator& operator++() { return *this; } back_emplace_iterator& operator++(int) { return *this; } }; template< class Container > inline back_emplace_iterator<Container> back_emplacer( Container& c ) { return back_emplace_iterator<Container>(c); } struct Demo { int i; Demo(int i) : i(i) {} }; int main() { std::vector<int> x = {1,2,3,4,5}; std::vector<Demo> y; std::copy(x.begin(), x.end(), back_emplacer(y)); for (auto d : y) std::cout << di << std::endl; } 

可能的已知问题: operator=的通用引用operator=隐藏隐式生成的复制/移动operator= ? 如果是这样的话,需要以一种在重载分辨率上胜过通用参考的方式来明确地定义这些参数。