C++ Primer Note(2)

序列容器(sequential contains)


  • 序列容器储存一组特定类型的对象,控制元素的存储和访问顺序。
    • 其中array有固定的大小,vector,string连续储存,易于查找而不易于增删元素,list,forward_list则相反。而deque能快速查找且仅在末尾易于增删。
    • 一般使用vector或list除非有其他原因。
    • 若在中部增删且只读,可以先用list储存,再复制为vector。

  • 概览

    • 迭代器(iterator) 的begin指向第一个元素,而end指向最后一个元素的下一位。此外,迭代器还提供了“++”,“- -”(除了forward_list)来访问元素。
    //使用auto定义迭代器的类型取决于a的类型
    auto it = a.begin() //只有a为const时it为const
    auto it = a.cbegin()  //it is const
    • 容器的类型成员
    size_type, iterator, const_iterator
    reserve iterator    //反向迭代器
    vector<int>::difference_type    //声明需要使用范围运算符
    • 容器的初始化
    vector<type> v(v1)	//直接拷贝初始化,除了array,注意类型相同
    vector<type> v(v1.begin(),v1.end())	//拷贝另一个容器的指定范围
    vector<type> v = {...};	//列表初始化
    vector<type> v(10);      //若type没有默认构造函数,则在size之后要赋值
    			 //vector<type> v(10,init)
    array<basic_type,10> arr = {0};	//array类型定义必须包含大小
    • assign and swap 的左右类型必须相同。
    //注意,array不能用{}分配值
    array<int,3> arr;
    arr = {};    //error

  • 序列容器的操作

    • 添加元素
    //由于push等操作通过拷贝传值,而emplace通过argument更快,
    //建议使用emplace
    push_back()	//include string, but aside from forward_list,array
    emplace_back()
    push_front()	//support deque,list,forward_list
    emplac()
    insert(iter,val)	//insert val before iter
    emplace_front()
    • 查找元素
    front()		//all
    back()		//expect forward_list
    c[n]
    c.at(n)		//ensure the index is valid
    • 删除元素
    pop与push对应;
    erase(iter);
    erase(iter1,iter2);
    clear()		//delete all
    • 改变容器的大小
      resize()
    • 增删元素会改变容器的大小,因此可能会使迭代器出错。

  • How a vector grow
    • 容器(vector,string)实现保留多余的空间给新的元素,避免为添加元素重新分配新的空间给已有(existing)和新的元素。
    capacity()	//容器已占用空间和保留的空间
    size()		//容器已占用的空间
    reserve(n)	//设定容器的空间,使容器不必重新分配空间
    shrink_to_fit()	//减小空间至刚刚好,一般不用

  • 适配器(Container Adaptors) : stack, queue, priority_queue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值