C++primer学习:顺序容器(2)

[1]顺序容器的插入操作:push_front,push_back之类的操作很简单,但是不支持在随机位置插入元素.

insert(p,10,t)在迭代器p之前插入10个t.

insert(p,t)在迭代器p之前插入t.

insert(p,b,e)在迭代器p之前插入b,e范围的元素.

insert(p,{“”“”})在迭代器p之前插入一个初始化列表.

所有操作返回第一个插入元素的迭代器.如果没有插入,返回p。

[1]练习:利用insert返回值,可以反复在一个特定位置插入元素

int main()
{
    deque<string> lst;
    string word;
    auto iter = lst.begin();
    while (cin >> word)
    {
        iter = lst.insert(iter,2, word);
    }
    return 0;
}

[2]练习:从一个list〈int〉中拷贝元素,奇数的拷贝到一个vector〈int〉容器,偶数的拷贝到另一个容器.

    list<int> L{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    vector<int> vec1, vec2;
    for (const auto &it : L)
        ((it % 2) ? (vec1) : (vec2)).push_back(it);

[3]注意插入操作后迭代器会失效,需要重新赋值

VecInt vc(10, 1);
    auto cursor = vc.size() / 2;
    VecInt::iterator iter = vc.begin(), mid = iter + cursor;
    while (iter!=mid)
    {
        iter = vc.insert(iter, 2,3);
        ++iter;
        mid = vc.begin() + vc.size() / 2;
    }

[4]成员函数back,front返回的是一个引用,可以v.back() = value来改变容器元素.但是注意auto it = v.back(),it只是一个拷贝.

[5]非成员函数begin(),end()可以兼容所有STL容器以及c的数组.

练习:从int[]数组中拷贝数据到list〈int〉与vector〈int〉,然后分别删除奇数与偶数.

//一定要在erase后将迭代器更新!

int ia[] = {0,1,1,2,3,5,8,13,21,55,89};
    VecInt vc(ia,end(ia));
    list<int> vl(ia,end(ia));
    auto it = vc.begin();
    auto  it2 = vl.begin();
    while (it != vc.end())
        (*it % 2) ? (++it, it2 = vl.erase(it2)) : (it = vc.erase(it), ++it2);//注意表达式的值要匹配,顺序很重要
    return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值