如果it1和it2之间有什么区别?
std::set<sometype> s;
auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());
Run Code Online (Sandbox Code Playgroud) 我想std::copy用于将元素插入到队列中,如下所示:
vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
queue<int> q;
copy( v.begin(), v.end(), insert_iterator< queue<int> >( q, q.front() ) );
Run Code Online (Sandbox Code Playgroud)
但这无法编译,抱怨begin不是其中的一员std::queue.
注意:我也试过std::inserter了 - 这也失败了,这次说'reference'不是'std :: queue'的成员. std::back_inserter并且std::back_insert_iterator还失败,相同的错误.
我错过了一些明显的东西,还是insert_iterator只是不能使用队列?
std::对于无序集合是否有插入迭代器?据我所知,std::inserter需要一个迭代器参数.这对于无序容器(至少对于boost::unordered_set)是不安全的,因为它们可能在insert操作期间重新分配并且使传递的.begin()迭代器无效.
所以目前我必须通过我自己的迭代器,它实际上是一个boost::function_output_iterator简单调用的仿函数unorderedSet.insert(param1).
为什么是它std::inserter甚至需要在hint迭代的说法呢?
在下面的代码中,我创建了一个insert_iterator而不包含迭代器头.怎么可能这个编译?我是c/c ++的新手,所以这可能会有一个很明显的解释.
#include <list>
//#include <iterator>
int main()
{
std::list<int> mylist(10,1);
std::insert_iterator<std::list<int> > it(mylist,mylist.begin());
return(0);
}
Run Code Online (Sandbox Code Playgroud)