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()可以吗 展开
其中insert_iterator<set<int> >(eg3,eg3.begin())是什么意思
直接写eg3.begin()可以吗 展开
展开全部
直接用eg3.begin()有两个问题。
eg3.begin()返回的是常量迭代器,不能当输出迭代器。
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询