C++:string、vector、数组、迭代器、顺序容器、关联容器

头文件

  • 每个容器都定义在一个头文件中,文件名和类型名相同

string

  • 读取操作:
    • cin >> s;
      • string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起直到遇见下一处空白为止
      • 此类操作也返回运算符左侧的运算对象作为其结果;因此,多个输入输出可以连写:cin >> s1 >> s2;
    • while( cin >> s );
      • 读取数量未知的字符串
      • 流有效则循环读取,直到遇见文件结束标记(mac文件结束符 ctrl+d)或非法输入
    • while( getline( cin, s ) );
      • 可以保留输入时的空白符
      • getline一遇到换行符就结束读取操作
      • getline也返回它的流参数
  • size()函数返回值类型:string::size_type 类型
  • string、字面值的对象相加
    • 两个string对象可以直接相加:+、+=
    • 当把string对象和字符字面值混在一条语句中使用时,必须确保每个+两侧运算对象至少有一个是string.
    • 当把两个字面值对象直接相加时,会出错,编译器无法做到
    • C++中,(为了兼容c)字符串字面值并不是标准库类型string的对象。两者是不同的类型。
    • C风格字符串:字符串字面值(空字符结束
  • for(auto &c : s)
    • 把循环变量定义为引用类型:改变string对象中字符的值。
  • 接受 const char* 的构造函数
    • 当我们从一个 const char* 创建 string 时,指针指向的数组必须以空字符结尾,拷贝操作遇到空字符停止。
  • 搜索操作:if(s.find(t) != string::npos)
    • 若搜索失败,返回 string::npos;
    • 初始值为 -1.
    • static

迭代器

  • 泛型编程:养成使用 != 和 迭代器 的习惯。
    • 所有的标准库容器都定义了 == 和 !=,但是大多数都没有定义 <.
    • 所有的标准库容器都定义了迭代器,但只有少数可以同时支持下标。
  • 迭代器类型:
    • iteratorconst_iterator ;也可直接用 auto 定义。
  • 迭代器运算:
    • 迭代器之间运算符只有 “-”,没有“+”
    • 迭代器和整数之间可“+”可“-”

内置数组

  • 内置数组大小确定,数组不能增加元素
  • 字符数组
    • 可以用字符串字面值初始化字符数组。字符串字面值结尾的空字符也会被拷贝到字符数组中
    • char a1[] = "c++"; // a1[]维度为4,包含空字符串
  • 对于复杂的数组声明:由内而外比从右向左阅读好得多。
  • 尽量使用标准库类型vector和迭代器,避免使用内置数组和指针。
  • 大多数表达式中,使用数组类型的对象是使用一个指向该数组首元素的指针。
  • 多维数组:实际上,就是数组的数组。

标准库array

  • 与内置数组一样,array的大小也是类型的一部分
  • 与内置数组不同,array可以进行拷贝或赋值

容器适配器

  • 适配器:一种机制,使得某种事物的行为看起来像另外一种事物一样。
  • 容器适配器种类
    • stack:基于deque
    • queue:基于deque
    • priority_queue:基于vector;允许我们为队列中的元素建立优先级。

set

  • 支持高效关键字查询:检查给定关键字是否在set中。
  • 分类:
    • set去重且有序
    • multiset:未去重且有序
    • unordered_set:去重且无序
    • unordered_multiset:未去重且无序
  • 迭代器
    • 解引用set,关键字是const

map

  • <key, value>对,关键词key类似数组下标起索引作用。
  • 当从map中提取元素时,会得到一个 pair 类型的对象。
  • 分类:
    • map去重且有序
    • multimap:未去重且有序
    • unorder_map:去重且无序
    • unordered_multimap:未去重且无序
  • pair类型
    • make_pair(v1, v2);
    • 模版类型,定义在头文件 utility 中。
    • pair两个数据成员:first,second . 都是public的。
  • 迭代器
    • 解引用 map 得到 pair 中,first是const .

顺序容器操作

顺序容器操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值