顺序容器添加操作

本章内容均从c++ primer摘录总结

所有容器除array外,都支持动态的添加操作,但c++顺序容器添加元素的方法可以说是五花八门,让人眼花缭乱,下面总结了一下容器进行插入操作常用的函数和算法:

顺序容器与关联容器在使用时最本质的区别是顺序容器是通过元素位置去操作容器,而关联容器是通过元素值去操作容器。因此,对于顺序容器的添加操作主要需要掌握在容器的头部,尾部,以及任意位置添加一个或者多个元素的方法。

注意:以下array容器均不支持。

1.头部添加元素

方法1:采用push_front, emplace_front: vector不支持此操作
list<pair<int, string>> list; 
list.push_front(make_pair<int, string>(10, "hello"));
list.emplace_front(12,"hello");

方法2.非forward_list容器,可以使用insert, emplace,返回新添加第一个插入元素的迭代器
li.insert(li.begin(), make_pair<int, string>(13, "hello"));
li.emplace(li.begin(), 14, "hello");

方法3.forwar_list可以使用insert_after,emplace_after,返回最后一个插入元素的迭代器
//forward_list容器
forward_list<pair<int, string>> fli; 
fli.insert(fli.before_begin(), make_pair<int, string>(13, "hello"));
fli.emplace(fli.before_begin(), 14, "hello");

方法4.使用前置插入迭代器front_iterator插入多个元素
list<int> li = {1,1,2,2,3,3,4,4};
forward_list<int> fli_1, fli_2;
unique_copy(li.begin(), li.end(), front_inserter(fli_1)); //fli_1:4,3,2,1
unique_copy(li.rbegin(), li.rend(), front_inserter(fli_2));//fli_2:1,2,3,4 
2.任意位置添加多个元素,具体方法与在头部添加一个元素大同小异。
方法1:非forward_list容器三种方式
c.insert(p, b, e)   //p为目的容易位置,[b,e)为一对迭代器,
		    //返回新添加第一个插入元素的迭代器
					
c.insert(p, n, t)   //插入n个相同的t与元素

c.insert(p, li)     //li为元素值列表

方法2:forward_list
c.insert_after(p, b, e)   //p为目的容易位置,[b,e)为一对迭代器,
			  //返回新添加第一个插入元素的迭代器
					
c.insert_after(p, n, t)	  //插入n个相同的t与元素

c.insert_after(p, li)     //li为元素值列表

方法3.使用inserter迭代器
list<int> li = {1,1,2,2,3,3,4,4};
vector<int> vec = {10,11,12,13,14};
vector<int> vec_new;

//vec_new1:4,3,2,1
unique_copy(li.begin(), li.end(), back_inserter(vec_new)); 

//vec_new1 2 10 11 12 13 14 3 4
unique_copy(vec.begin(), vec.end(), inserter(vec_new, vec_new.begin() + 2)); 
3.在末尾插入元素(以下方法forward_list均不支持
方式1:使用push_back,emplace_back
list<pair<int, string>> list; 
list.push_back(make_pair<int, string>(10, "hello"));
list.emplace_back(12,"hello");

方法2:可以使用insert, emplace
li.insert(li.end(), make_pair<int, string>(13, "hello"));
li.emplace(li.end(), 14, "hello");

方法3.使用尾置插入迭代器back_iterator插入多个元素
list<int> li = {1,1,2,2,3,3,4,4};
vec<int> vec_1, vec_2;
unique_copy(li.begin(), li.end(), back_inserter(vec_1)); //vec_1:1,2,3,4
unique_copy(li.rbegin(), li.rend(), back_inserter(vec_2));//vec_2:4,3,2,1 






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值