首页 > 代码库 > 容器库概览
容器库概览
1. 对容器可以保存的元素类型的限制
顺序容器几乎可以保存任意类型的元素。特别是我们可以定义一个容器,容器中包含的是另一个容器,这种容器的定义与任何其他容器类型完全一样:
在尖括号中指定元素类型(此种情况下,是另一种元素类型)
vector<vector<string>> lines; //vector的vector,此处lines是一个vector,其元素类型是string的vector
容器操作:
类型别名:
iterator 此容器类型的迭代器类型; const_iterator 可以读取元素,但不能修改元素的迭代器类型
size_type 无符号整数类型,足够保存此种容器类型最大可能容器的大小
difference_type 带符号整数类型,足够保存两个迭代器之间的距离
value_type 元素类型
reference 元素的左值类型;与value_type&含义相同; const_reference 元素的const左值类型
构造函数:
C c; 默认构造函数,构造空容器
C c1(c2); 构造c2的拷贝c1
C c(b, e); 构造c,将迭代器b和e指定的范围内的元素拷贝到c
赋值与swap:
c1 = c2 将c1中的元素替换为c2中元素
c1 = {a,b,c...}将c1中的元素替换为列表中元素
a.swap(b) 交换a和b的元素 ;swap(a,b)相同
大小:
c.size() c中元素的数目
c.max_size() c中可保存的最大元素项目
c.empty() 若c中存储了元素,返回false,否则返回true
迭代器:
类似于指针类型,迭代器也提供了对对象的间接访问,就迭代器而言,其对象是容器中的元素或者string对象中的字符。使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素,迭代器有有效和无效之分,这一点和指针差不多
有效的迭代器或者指向某个元素,或者指向容器中尾元素的下一位置
使用迭代器:
和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员,譬如这些类型都拥有名为begin和end的成员,
其中begin成员负责返回指向第一个元素(或第一个字符)的迭代器;end成员则负责返回指向容器“尾元素的下一位置”的迭代器,也就是说,
该迭代器指示的是容器的一个本不存在的“尾后元素”,这样的迭代器没什么意义,仅是个标记而已,表示我们处理完了容器中的所有元素
end成员返回的迭代器常被称为尾后迭代器或者简称为尾迭代器,特殊情况下,如果容器为空,那么begin和end返回的是同一个迭代器
容器库概览