深入学习c++(STL之容器,stdforward_list)

#include <#include <forward_list>>

// vector 是 c++ 98中引入的动态数组 
namespace std {
  template<typename T,typename Allocator = allocator<T>>
  class forward_list;
}
// forward_list 是c++11 中引入的单向串列 (singly linked list)
// 特点,不支持随机访问元素,访问头部元素速度快
// forward_list 和 自己手写的c_-style singly linked list 相比
// 没有任何时间和空间上的额外开销,任何性质如果和这个目标抵触,我们放弃该特征.
// 任何位置插入,删除,元素都很快,常量时间内完成
// 插入和删除不会造成迭代器失败
// 对于异常支持的好,出现异常对于forward_list而言,要不成功,要不什么影响没有;

using Group = std::forward_list<float>;
// 多种初始化
Group a;
Group b = a;
Group c = {};// 空初化
Group d(a);
Group e(10);参数1为int时,则是申请多少个int的空间
Group f(10,1.0f);// 申请10个元素,每个元素的值均为1.0f
Group g(a.begin(),a.end());// 迭代器从头赋到尾
Group h({1.0,2.0,3.0});// 初始化三个元素
Group j = {1.0,2.0,3.0};// c++ 11 特有的用法


d.empty() 
// d.size();// 元素的数量 没有该方法
d.max_size();// 一般用不着,只有大公司才考虑这个

// 赋值
b = g;
b.assign(3,1.0)
b.assign(g.begin(),g.end())
b.assign({1.0,2.0,3.0})

// 交换
b.swap(a)
std:swap(a,b);

// 元素访问,不能随便访问
// 以下失效 b[0],b.at(0),b.back()
b.front();// 只有访问头部

// 迭代器  单方向遍历,所以不提供倒找
a.begin()
a.end()
a.cbegin()
a.cend()
a.before_begin() // 返回第一个有效元素的前一个位置
a.before_end() // 返回最后一个有效元素的最后一个位置

// 删除
b.erase_after(b.before_begin());// 删除第一个位置  // 本函数 return void;
b.erase_after(b.before_begin(),b.before_end());// 全删除

// 压入
b.bush_front(1.2f);
b.emplace_fornt(1.3f);
auto it = b.insert_after(b.before_begin(),100.0f)
it b.insert_after(a.before_begin(),10,100.0f)
b.insert_after(b.before_begin(),h.begin(),h.end())

b.resize(10);
b.resize(10.10.0f);

// 算法,因为是单向的
b.remove(1.0f);// 移除所有值是1.0f的元素
b.remove_if([](auto v) { retrun v > 100.0f ;});
b.sort() // <
b.reverse();// 反转
b.merge()
c.unique();// 1 1 2 2 3 3 4 4 -> 1 2 3 4
c.splice_after(c.before_begin(),b);

-- 假设,要往第3个位置插入 10 ,则需要进行以下操作
Group forlist = {1,2,3,4,5};
auto fiter = forlist.before_begin();
for(int i=0;i<2;++i) ++fiter;
forlist.insert_after(fiter,10);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值