C++ 笔记:顺序容器

本文详细介绍了C++中的顺序容器,包括向容器添加元素、访问元素、删除元素以及改变容器大小的操作。特别强调了迭代器的作用和使用,以及不同容器如vector、deque、list和forward_list在插入和删除操作上的特性。
摘要由CSDN通过智能技术生成

顺序容器概述

  • 顺序容器类型:
vector          // 可变大小数组;快速随机访问;尾部插入删除
deque           // 双端队列;快速随机访问;头尾插入删除
list            // 双向链表;双向顺序访问;任意位置插入删除
forward_list    // 单向链表;单向顺序访问;任意位置插入删除
array           // 数组;快速随机访问;不能插入删除
string          // 可变长数组;快速随机访问;尾部插入删除
  • 选用哪一种容器:
    • 通常首选 vector
    • 要求随机访问元素, 则使用 vectordeque
    • 要求在容器的中间插入或删除元素,则使用 listforward_list
    • 只要求在头尾插入或删除,则使用 deque
    • 如果程序只有在读取输入时才需要在容器中间位置插入元素, 随后需要随机访问元素,则
      • 处理输入数据时,通常可以先向 vector 追加数据,然后再调用标准库的 sprt 重排容器中的元素,从而避免在中间位置添加元素
      • 如果必须在中间位置插入元素,考虑在输入阶段使用 list,输入完成后则将 list 中的内容拷贝到 vector
      • 既需要随机访问元素,又需要在容器中间位置插入元素,则需要对比测试两种容器的性能

迭代器

  • 所有标准库容器都可以使用迭代器
  • 可以使用迭代器的类型拥有返回迭代器的成员函数
vector<T> vec{
   t1, t2, ..., tn};
auto b = vec.begin(), e = vec.end();  // b 指向 vec 的第一个元素,e 指向 vec 的尾后元素
                                      // 一般情况下不必关心迭代器本身的类型,因此此处使用 auto
  • 空容器的 begin()end() 返回的都是尾后迭代器返回的都是尾后迭代器
  • 使用迭代器时不允许改变容器的大小

迭代器运算

*iter           // 解引用,返回 iter 所指元素的引用
iter->member    // 返回 iter 所指元素中的 member 成员,相当于 (*iter).member
++iter, --iter  // 移动 iter,forward_list 不支持迭代器的递减运算
// 以下只适用于 string、vector、deque 和 array
iter + n, iter - n
iter += n, iter -= n
iter1 == iter2, iter1 != iter2
iter1 - iter2
iter1 <, <=, >=, > iter2
  • 使用迭代器遍历处理容器:
vector<int> ivec{
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (auto iter = ivec.begin(); iter != ivec.end(); ++iter)
  *iter *= *iter;
for (auto i : ivec)
  cout << i << " ";
cout << endl;   // output: 0 1 4 9 16 25 36 49 64 81

string text = "hello, world!";
for (<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值