c++ stl set set_difference函数最后一个参数

set_difference(eg1.begin(),eg1.end(),eg2.begin(),eg2.end(),insert_iterator<set<int>>(... set_difference(eg1.begin(),eg1.end(),eg2.begin(),eg2.end(),insert_iterator<set<int> >(eg3,eg3.begin()));
其中insert_iterator<set<int> >(eg3,eg3.begin())是什么意思
直接写eg3.begin()可以吗
展开
 我来答
ring_year
推荐于2016-03-01 · TA获得超过1425个赞
知道小有建树答主
回答量:632
采纳率:80%
帮助的人:541万
展开全部

直接用eg3.begin()有两个问题。

  1. eg3.begin()返回的是常量迭代器,不能当输出迭代器。

  2. set_difference()是覆盖内容,而非插入,要求eg3有足够空间存储数据。


insert_iterator<set<int> >(eg3,eg3.begin())

首先insert_iterator是插入迭代器,可以将复制内容转为插入,它模拟了地带器输出概念,将输出转为插入数据到目标位置。

(eg3,eg3.begin()),可以理解为创建了一个匿名的insert_iterator<set<int> > 类型,然后复制给eg3。

insert_iterator(
   Container& _Cont,
   typename Container::iterator _It
);

insert_iterator原型如上,第一个参数是插入元素的容器,第二个参数是插入位置。

其更常规的用法如下(来自msdn):

// insert_iterator_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>


int main( )
{
   using namespace std;
   int i;
   list <int>::iterator L_Iter;

   list<int> L;
   for (i = 1 ; i < 4 ; ++i )  
   {
      L.push_back ( 10 * i );
   }

   cout << "The list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
      cout << *L_Iter << " ";
   cout << ")." << endl;

   // Using the member function to insert an element
   inserter ( L, L.begin ( ) ) = 2;

   // Alternatively, you may use the template version
   insert_iterator< list < int> > Iter(L, L.end ( ) );
   *Iter = 300;

   cout << "After the insertions, the list L is:\n ( ";
   for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
      cout << *L_Iter << " ";
   cout << ")." << endl;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式