使用insert_iterator简化通用容器操作

本文介绍了如何在C++标准模板库(STL)中为不同的容器实现通用的插入操作。通过使用`std::front_inserter`、`std::back_inserter`及`std::inserter`等迭代器适配器,可以方便地为`vector`、`list`、`set`等容器编写统一的插入函数。
STL中的不同容器具有不同的插入操作接口,比如

vector,list,queue等使用push_back,pop_front等
map, set等使用insert

如何编写通用的插入操作呢。这里可以使用insert iterator

template<typename OutIt>
void build( OutIt it ) {
for( int i=0;i<100;i++) {
*it ++ = i;
}
}

std::vector<int> vec;
build( std::front_inserter( vec ));
build( std::back_inserter( vec ));

std::set<int> _set;
build( std::inserter( _set, _set.begin()));


也可以直接使用insert_iterator模板类定义更复杂的insert iterator
Line 17: Char 27: error: no matching member function for call to 'insert' 17 | nums1.insert(p1, nums2[p2]); | ~~~~~~^~~~~~ /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1364:7: note: candidate function not viable: no known conversion from 'int' to 'const_iterator' (aka '__normal_iterator<const int *, std::vector<int, std::allocator<int>>>') for 1st argument 1355 | insert(const_iterator __position, const value_type& __x); | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1395:7: note: candidate function not viable: no known conversion from 'int' to 'const_iterator' (aka '__normal_iterator<const int *, std::vector<int, std::allocator<int>>>') for 1st argument 1386 | insert(const_iterator __position, value_type&& __x) | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1413:7: note: candidate function not viable: no known conversion from 'int' to 'const_iterator' (aka '__normal_iterator<const int *, std::vector<int, std::allocator<int>>>') for 1st argument 1404 | insert(const_iterator __position, initializer_list<value_type> __l) | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1439:7: note: candidate function not viable: requires 3 arguments, but 2 were provided 1430 | insert(const_iterator __position, size_type __n, const value_type& __x) | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1484:2: note: candidate function template not viable: requires 3 arguments, but 2 were provided 1475 | insert(const_iterator __position, _InputIterator __first, | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1476 | _InputIterator __last) | ~~~~~~~~~~~~~~~~~~~~~ 1 error generated.
最新发布
09-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值